Advertisement
Guest User

Nasa DB

a guest
Aug 22nd, 2014
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.18 KB | None | 0 0
  1. use hitran;
  2.  
  3.  
  4.  
  5. CREATE TABLE `hitran`.`Mass` (
  6. `LINE` VARCHAR( 62 ) NULL DEFAULT NULL ,
  7. `MOL` VARCHAR( 12 ) NULL DEFAULT NULL,
  8. `ISOL` VARCHAR(12) NULL DEFAULT NULL,
  9. `IGAS` VARCHAR(2) NULL DEFAULT NULL,
  10. `ISO` VARCHAR(1) NULL DEFAULT NULL,
  11. `ABUNDANCE` FLOAT NULL DEFAULT NULL,
  12. `g_j` INT(4) NULL DEFAULT NULL,
  13. `MASS` FLOAT NULL DEFAULT NULL
  14. ) ENGINE = MYISAM COMMENT = 'Truncated parsum table';
  15.  
  16. LOAD DATA LOCAL INFILE 'molparam.txt' INTO TABLE Mass(@var1)
  17. SET
  18. LINE = substr(@var1, 1, 62);
  19. #update Mass set MOL = TRIM(" " FROM SUBSTRING_INDEX(LINE,'(',1));
  20.  
  21. update Mass set IGAS = SUBSTRING_INDEX(SUBSTRING_INDEX(LINE,')',1),'(',-1);
  22. update Mass set ISOL = TRIM(" " FROM substr(LINE,1,13));
  23.  
  24. update Mass set ABUNDANCE = substr(LINE,14,12);
  25. update Mass set g_j = substr(LINE,40,5);
  26. update Mass set MASS = substr(LINE,45,14);
  27.  
  28. #should be able to do this to get MOL and ISO
  29. alter table Mass add column `T296` FLOAT;
  30. update Mass set T296 = substr(LINE,26,14);
  31. # remove lines that are not data lines
  32. delete from mass where `T296` = 0;
  33. # fill in the MOL,IGAS and ISO fields
  34. update Q,Mass set Mass.MOL = Q.MOL where Q.ISOL = Mass.ISOL and FORMAT(Q.T296,0) = FORMAT(Mass.T296,0);
  35. update Q,Mass set Mass.IGAS = Q.IGAS where Q.ISOL = Mass.ISOL and FORMAT(Q.T296,0) = FORMAT(Mass.T296,0);
  36. update Q,Mass set Mass.ISO = Q.ISO where Q.ISOL = Mass.ISOL and FORMAT(Q.T296,0) = FORMAT(Mass.T296,0);
  37. # this did not quite get all of the entries in the mass table :(
  38. # descrepancies exist with CO2 ISO>7, O3 ISO>7 CH4 ISO>3, HCN ISO < 3, C2H6 ISO >1
  39. # I added new ISO tags for CO2 ISO>7 , O3 ISO>7 (inserted above), HCN just needed to be rerun
  40.  
  41. SELECT MOL, ISOL, ISO, IGAS FROM Mass;
  42.  
  43. # HOBr and 312 Methane and 838 CO2 and 837 CO2 and 1231 C2H6 seem to be missing from Q
  44. # O, CH3OH and HOBr did not work match to Mass
  45.  
  46. SELECT MOL, ISOL, ISO, IGAS FROM Mass where ISOL = 6; #check for unique return
  47. update Mass set MOL = 'O' where ISOL = 6;
  48. update Mass set ISO = 1 where ISOL = 6;
  49. update Mass set IGAS = 34 where ISOL = 6;
  50.  
  51. SELECT MOL, ISOL, ISO, IGAS FROM Mass where ISOL = 2161; #check for unique return
  52. update Mass set MOL = 'CH3OH' where ISOL = 2161;
  53. update Mass set ISO = 1 where ISOL = 2161;
  54. update Mass set IGAS = 39 where ISOL = 2161;
  55.  
  56. SELECT MOL, ISOL, ISO, IGAS FROM Mass where ISOL = 219; #check for unique return
  57. update Mass set MOL = 'HOBr' where ISOL = 219;
  58. update Mass set ISO = 1 where ISOL = 219;
  59. update Mass set IGAS = 40 where ISOL = 219;
  60.  
  61. SELECT MOL, ISOL, ISO, IGAS FROM Mass where ISOL = 211; #check for unique return
  62. #not unique!
  63. SELECT MOL, ISOL, ISO, IGAS FROM Mass where ISOL = 211 and MASS > 90; #check for unique return
  64. update Mass set MOL = 'HOBr' where ISOL = 211 and MASS > 90;
  65. update Mass set ISO = 2 where ISOL = 211 and MASS > 90;
  66. update Mass set IGAS = 40 where ISOL = 211 and MASS > 90;
  67.  
  68. update Mass set ISO = 1 where IGAS = 42 and ISOL = 29;
  69.  
  70. # HOBr and 312 Methane and 838 CO2 and 837 CO2 and 1231 C2H6 seem to be missing from Q - this should remove entries in Mass
  71. SELECT MOL, ISOL, ISO, IGAS FROM Mass where ISO is NULL;
  72. delete from Mass where ISO is NULL;
  73.  
  74. #this worked except for HOBr because of my manual entries for ISO - why no Q for HOBr?
  75.  
  76. #Try to rebuild parsum with rows and columns the same as table (and get all lines up to 3000 K)
  77. CREATE TABLE `hitran`.`QT` (
  78. `Q_T` VARCHAR( 2916 ) NULL DEFAULT NULL
  79. ) ENGINE = MYISAM COMMENT = 'Truncated parsum table';
  80.  
  81.  
  82. LOAD DATA LOCAL INFILE 'parsum.dat' INTO TABLE QT(@var1)
  83. SET
  84. Q_T = substr(@var1, 1, 2916);
  85.  
  86. ALTER TABLE QT add COLUMN `T` int;
  87.  
  88. DROP PROCEDURE IF EXISTS PARSE_QT;
  89. DELIMITER $$
  90. CREATE PROCEDURE PARSE_QT(IN b INT, IN c INT, IN sqlstr VARCHAR(2916))
  91. #input should be first field size and total field
  92. BEGIN
  93. DECLARE i INT Default 0 ;
  94. SET i=8-b;
  95. simple_loop: LOOP
  96. SET i=i+b;
  97. IF i>c-b THEN
  98. LEAVE simple_loop;
  99. END IF;
  100. SELECT i;
  101. SET @d:=CONCAT('alter table QT add column \`', TRIM(" " FROM substr(sqlstr,i,27)), '\` float');
  102. SELECT @d;
  103. PREPARE n_StrSQL FROM @d;
  104. EXECUTE n_StrSQL;
  105. END LOOP simple_loop;
  106. END $$
  107. delimiter ;
  108. CALL PARSE_QT(27,2916,'Temp(K) H2O_161 H2O_181 H2O_171 H2O_162 H2O_182 H2O_172 CO2_626 CO2_636 CO2_628 CO2_627 CO2_638 CO2_637 CO2_828 CO2_827 O3_666 O3_668 O3_686 O3_667 O3_676 O3_678 O3_767 O3_768 O3_776 O3_777 O3_778 O3_786 O3_787 O3_868 O3_878 O3_886 O3_887 O3_888 N2O_446 N2O_456 N2O_546 N2O_448 N2O_447 CO_26 CO_36 CO_28 CO_27 CO_38 CO_37 CH4_211 CH4_311 CH4_212 O2_66 O2_68 O2_67 NO_46 NO_56 NO_48 SO2_626 SO2_646 NO2_646 NH3_4111 NH3_5111 HNO3_146 OH_61 OH_81 OH_62 HF_19 HCl_15 HCl_17 HBr_19 HBr_11 HI_17 ClO_56 ClO_76 OCS_622 OCS_624 OCS_632 OCS_623 OCS_822 H2CO_126 H2CO_136 H2CO_128 HOCl_165 HOCl_167 N2_44 HCN_124 HCN_134 HCN_125 CH3Cl_215 CH3Cl_217 H2O2_1661 C2H2_1221 C2H2_1231 C2H6_1221 PH3_1111 COF2_269 SF6_29 H2S_121 H2S_141 H2S_131 HCOOH_126 HO2_166 O_6 ClONO2_5646 ClONO2_7646 NO+_46 HOBr_169 HOBr_161 C2H4_221 C2H4_231 CH3OH_2161 CH3CN_2124 CF4_29');
  109.  
  110.  
  111.  
  112. DROP PROCEDURE IF EXISTS PARSE_QT2;
  113. DELIMITER $$
  114. CREATE PROCEDURE PARSE_QT2(IN a INT, IN b INT, IN c INT, IN sqlstr VARCHAR(2916))
  115. #input should be first field size and total field
  116. BEGIN
  117. DECLARE i INT Default 0 ;
  118. UPDATE QT set T = substr(Q_T,1,8);
  119. SET i=a-b;
  120. simple_loop: LOOP
  121. SET i=i+b;
  122. IF i>c-b THEN
  123. LEAVE simple_loop;
  124. END IF;
  125.  
  126. SET @d:=CONCAT('update QT set ', TRIM(" " FROM substr(sqlstr,i,27)), ' = substr(Q_T,', i,', 19)');
  127. SELECT @d;
  128. PREPARE n_StrSQL FROM @d;
  129. EXECUTE n_StrSQL;
  130. IF i>c-b THEN
  131. LEAVE simple_loop;
  132. END IF;
  133. END LOOP simple_loop;
  134. END $$
  135. delimiter ;
  136. CALL PARSE_QT2(8,27,2916,'Temp(K) H2O_161 H2O_181 H2O_171 H2O_162 H2O_182 H2O_172 CO2_626 CO2_636 CO2_628 CO2_627 CO2_638 CO2_637 CO2_828 CO2_827 O3_666 O3_668 O3_686 O3_667 O3_676 O3_678 O3_767 O3_768 O3_776 O3_777 O3_778 O3_786 O3_787 O3_868 O3_878 O3_886 O3_887 O3_888 N2O_446 N2O_456 N2O_546 N2O_448 N2O_447 CO_26 CO_36 CO_28 CO_27 CO_38 CO_37 CH4_211 CH4_311 CH4_212 O2_66 O2_68 O2_67 NO_46 NO_56 NO_48 SO2_626 SO2_646 NO2_646 NH3_4111 NH3_5111 HNO3_146 OH_61 OH_81 OH_62 HF_19 HCl_15 HCl_17 HBr_19 HBr_11 HI_17 ClO_56 ClO_76 OCS_622 OCS_624 OCS_632 OCS_623 OCS_822 H2CO_126 H2CO_136 H2CO_128 HOCl_165 HOCl_167 N2_44 HCN_124 HCN_134 HCN_125 CH3Cl_215 CH3Cl_217 H2O2_1661 C2H2_1221 C2H2_1231 C2H6_1221 PH3_1111 COF2_269 SF6_29 H2S_121 H2S_141 H2S_131 HCOOH_126 HO2_166 O_6 ClONO2_5646 ClONO2_7646 NO+_46 HOBr_169 HOBr_161 C2H4_221 C2H4_231 CH3OH_2161 CH3CN_2124 CF4_29');
  137. #This crashed at NO+ probably because of the special character
  138. #+---------------------------------------------+
  139. #| @d |
  140. #+---------------------------------------------+
  141. #| update QT set NO+_46 = substr(Q_T,2708, 19) |
  142. #+---------------------------------------------+
  143. #1 row in set (49.20 sec)
  144.  
  145. #ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+_46 = substr(Q_T,2708, 19)' at line 1
  146.  
  147. CALL PARSE_QT2(2735,27,2916,'Temp(K) H2O_161 H2O_181 H2O_171 H2O_162 H2O_182 H2O_172 CO2_626 CO2_636 CO2_628 CO2_627 CO2_638 CO2_637 CO2_828 CO2_827 O3_666 O3_668 O3_686 O3_667 O3_676 O3_678 O3_767 O3_768 O3_776 O3_777 O3_778 O3_786 O3_787 O3_868 O3_878 O3_886 O3_887 O3_888 N2O_446 N2O_456 N2O_546 N2O_448 N2O_447 CO_26 CO_36 CO_28 CO_27 CO_38 CO_37 CH4_211 CH4_311 CH4_212 O2_66 O2_68 O2_67 NO_46 NO_56 NO_48 SO2_626 SO2_646 NO2_646 NH3_4111 NH3_5111 HNO3_146 OH_61 OH_81 OH_62 HF_19 HCl_15 HCl_17 HBr_19 HBr_11 HI_17 ClO_56 ClO_76 OCS_622 OCS_624 OCS_632 OCS_623 OCS_822 H2CO_126 H2CO_136 H2CO_128 HOCl_165 HOCl_167 N2_44 HCN_124 HCN_134 HCN_125 CH3Cl_215 CH3Cl_217 H2O2_1661 C2H2_1221 C2H2_1231 C2H6_1221 PH3_1111 COF2_269 SF6_29 H2S_121 H2S_141 H2S_131 HCOOH_126 HO2_166 O_6 ClONO2_5646 ClONO2_7646 NO+_46 HOBr_169 HOBr_161 C2H4_221 C2H4_231 CH3OH_2161 CH3CN_2124 CF4_29');
  148.  
  149.  
  150. SELECT FORMAT(`T`,1) , FORMAT(`H2O_161`,6) , FORMAT(`H2O_181`,6) , FORMAT(`H2O_171`,6) , FORMAT(`H2O_162`,6) , FORMAT(`H2O_182`,6) , FORMAT(`H2O_172`,6)
  151. FROM `QT`
  152. WHERE 1
  153. LIMIT 0 , 3000
  154.  
  155. #*******************************
  156. #Try to rebuild parsum with rows and columns the same as table (and get all lines up to 3000 K) with decimal format
  157. #The decimal format allows better csv output, the NO+ tag was changed to NOp
  158. DROP TABLE `hitran`.`QTD`;
  159.  
  160. CREATE TABLE `hitran`.`QTD` (
  161. `Q_T` VARCHAR( 2916 ) NULL DEFAULT NULL
  162. ) ENGINE = MYISAM COMMENT = 'Truncated parsum table';
  163.  
  164.  
  165. LOAD DATA LOCAL INFILE 'parsum.dat' INTO TABLE QTD(@var1)
  166. SET
  167. Q_T = substr(@var1, 1, 2916);
  168.  
  169. ALTER TABLE QTD add COLUMN `T` int;
  170. DROP PROCEDURE IF EXISTS PARSE_QTD;
  171. DELIMITER $$
  172. CREATE PROCEDURE PARSE_QTD(IN b INT, IN c INT, IN sqlstr VARCHAR(2916))
  173. #input should be first field size and total field
  174. BEGIN
  175. DECLARE i INT Default 0 ;
  176. SET i=8-b;
  177. simple_loop: LOOP
  178. SET i=i+b;
  179. IF i>c-b THEN
  180. LEAVE simple_loop;
  181. END IF;
  182. SELECT i;
  183. SET @d:=CONCAT('alter table QTD add column \`', TRIM(" " FROM substr(sqlstr,i,27)), '\` decimal(19,6)');
  184. SELECT @d;
  185. PREPARE n_StrSQL FROM @d;
  186. EXECUTE n_StrSQL;
  187. END LOOP simple_loop;
  188. END $$
  189. delimiter ;
  190. CALL PARSE_QTD(27,2916,'Temp(K) H2O_161 H2O_181 H2O_171 H2O_162 H2O_182 H2O_172 CO2_626 CO2_636 CO2_628 CO2_627 CO2_638 CO2_637 CO2_828 CO2_827 O3_666 O3_668 O3_686 O3_667 O3_676 O3_678 O3_767 O3_768 O3_776 O3_777 O3_778 O3_786 O3_787 O3_868 O3_878 O3_886 O3_887 O3_888 N2O_446 N2O_456 N2O_546 N2O_448 N2O_447 CO_26 CO_36 CO_28 CO_27 CO_38 CO_37 CH4_211 CH4_311 CH4_212 O2_66 O2_68 O2_67 NO_46 NO_56 NO_48 SO2_626 SO2_646 NO2_646 NH3_4111 NH3_5111 HNO3_146 OH_61 OH_81 OH_62 HF_19 HCl_15 HCl_17 HBr_19 HBr_11 HI_17 ClO_56 ClO_76 OCS_622 OCS_624 OCS_632 OCS_623 OCS_822 H2CO_126 H2CO_136 H2CO_128 HOCl_165 HOCl_167 N2_44 HCN_124 HCN_134 HCN_125 CH3Cl_215 CH3Cl_217 H2O2_1661 C2H2_1221 C2H2_1231 C2H6_1221 PH3_1111 COF2_269 SF6_29 H2S_121 H2S_141 H2S_131 HCOOH_126 HO2_166 O_6 ClONO2_5646 ClONO2_7646 NOp_46 HOBr_169 HOBr_161 C2H4_221 C2H4_231 CH3OH_2161 CH3CN_2124 CF4_29');
  191.  
  192.  
  193. DROP PROCEDURE IF EXISTS PARSE_QT4;
  194. DELIMITER $$
  195. CREATE PROCEDURE PARSE_QT4(IN a INT, IN b INT, IN c INT, IN sqlstr VARCHAR(2916))
  196. #input should be first field size and total field
  197. BEGIN
  198. DECLARE i INT Default 0 ;
  199. UPDATE QTD set T = substr(Q_T,1,8);
  200. SET i=a-b;
  201. simple_loop: LOOP
  202. SET i=i+b;
  203. IF i>c-b THEN
  204. LEAVE simple_loop;
  205. END IF;
  206.  
  207. SET @d:=CONCAT('update QTD set ', TRIM(" " FROM substr(sqlstr,i,27)), ' = substr(Q_T\,', i,', 19)');
  208. SELECT @d;
  209. PREPARE n_StrSQL FROM @d;
  210. EXECUTE n_StrSQL;
  211. IF i>c-b THEN
  212. LEAVE simple_loop;
  213. END IF;
  214. END LOOP simple_loop;
  215. END $$
  216. delimiter ;
  217. CALL PARSE_QT4(8,27,2916,'Temp(K) H2O_161 H2O_181 H2O_171 H2O_162 H2O_182 H2O_172 CO2_626 CO2_636 CO2_628 CO2_627 CO2_638 CO2_637 CO2_828 CO2_827 O3_666 O3_668 O3_686 O3_667 O3_676 O3_678 O3_767 O3_768 O3_776 O3_777 O3_778 O3_786 O3_787 O3_868 O3_878 O3_886 O3_887 O3_888 N2O_446 N2O_456 N2O_546 N2O_448 N2O_447 CO_26 CO_36 CO_28 CO_27 CO_38 CO_37 CH4_211 CH4_311 CH4_212 O2_66 O2_68 O2_67 NO_46 NO_56 NO_48 SO2_626 SO2_646 NO2_646 NH3_4111 NH3_5111 HNO3_146 OH_61 OH_81 OH_62 HF_19 HCl_15 HCl_17 HBr_19 HBr_11 HI_17 ClO_56 ClO_76 OCS_622 OCS_624 OCS_632 OCS_623 OCS_822 H2CO_126 H2CO_136 H2CO_128 HOCl_165 HOCl_167 N2_44 HCN_124 HCN_134 HCN_125 CH3Cl_215 CH3Cl_217 H2O2_1661 C2H2_1221 C2H2_1231 C2H6_1221 PH3_1111 COF2_269 SF6_29 H2S_121 H2S_141 H2S_131 HCOOH_126 HO2_166 O_6 ClONO2_5646 ClONO2_7646 NOp_46 HOBr_169 HOBr_161 C2H4_221 C2H4_231 CH3OH_2161 CH3CN_2124 CF4_29');
  218.  
  219.  
  220. SELECT `T`, `H2O_161`, `H2O_181` , `H2O_171` , `H2O_162` , `H2O_182` , `H2O_172`
  221. FROM `QTD`
  222. WHERE 1
  223. LIMIT 0 , 3000
  224.  
  225.  
  226. SELECT `T`, `HNO3_146`
  227. FROM `QTD`
  228. WHERE 1
  229. LIMIT 0 , 3000
  230.  
  231. SELECT `T`, `HNO3_146` INTO OUTFILE '/tmp/test.txt' FIELDS TERMINATED BY '\,' LINES TERMINATED by '\,\n' FROM `QTD` WHERE 1 LIMIT 0 , 3000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement