Changeset 436 in Sophya for trunk/Poubelle/archTOI.old/archeopsfile.cc
- Timestamp:
- Sep 24, 1999, 11:23:23 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Poubelle/archTOI.old/archeopsfile.cc
r432 r436 9 9 extern "C" { 10 10 #include "compress.h" 11 #include "arcunit.h" 11 12 } 12 13 #include <iostream.h> … … 257 258 ArcheopsFile::ArcheopsFile(string const& fname) { 258 259 f = fopen(fname.c_str(), "rb"); 260 setvbuf(f, NULL, _IOFBF, 1024L*1024L); 261 259 262 fn = fname; 260 263 if (!f) throw ArchExc("file not found"); … … 294 297 fn = x.fn; 295 298 f = fopen(fn.c_str(), "rb"); 299 setvbuf(f, NULL, _IOFBF, 1024L*1024L); 296 300 297 301 rawMJD = x.rawMJD; … … 867 871 868 872 869 double ArcheopsFile::getRawBolo(int ibolo, int imesure) { // donnee brute, avec seulement soustraction offset 870 int nb_coups,aa; 873 double ArcheopsFile::getBoloRawMuV(int ibolo, int imesure) { // microvolts bruts 871 874 block_type_bolo* blk = imesure >= 0 ? lastBolo() : llastBolo(); 872 //cout << "raw " << imesure << " ";873 875 if (imesure < 0) imesure += nEchBlock(); 876 block_type_reglage* reglage = lastReglage(); 877 block_type_param* param = lastParam(); 874 878 if (!blk) return 0; 875 block_type_reglage* reglage = lastReglage();876 879 if (!reglage) return 0; 877 878 nb_coups= reglage->reglage.horloge.nb_mesures/2 - reglage->reglage.horloge.temp_mort; 879 aa = (nb_coups<<14) + (nb_coups*190) ; 880 880 if (!param) return 0; 881 881 882 int s = imesure % 2 ? 1 : -1; 882 883 //cout << s*(((val_DS(ibolo,imesure)-aa)<<1)/nb_coups) << "\n"; 884 885 return s*(((val_DS(ibolo,imesure)-aa)<<1)/double(nb_coups)); 886 } 887 888 double ArcheopsFile::getRawBoloCN(int ibolo, int imesure) { 889 // Si pas bloc comprime -> 0 890 if (lastBoloComp() == NULL) return 0; 891 if (numero_block(lastBoloComp()) != numero_block(lastBolo())) return 0; 892 block_type_reglage* reglage = lastReglage(); 893 if (!reglage) return 0; 894 895 int nb_coups= reglage->reglage.horloge.nb_mesures/2 - reglage->reglage.horloge.temp_mort; 896 unsigned int4* data = lastBoloComp()->data_bolo[ibolo]; 897 // Les deux premieres valeurs sont codees directement... 898 if (imesure<2) return 0; 899 int iExp = (imesure-2)/4 + 1; 900 int expo = data[iExp] & 0xf; 901 int noise = 1 << expo; 902 return (noise << 1)/double(nb_coups)/2.; 903 } 904 905 906 907 def_gains 908 909 double ArcheopsFile::getMuVBolo(int ibolo, int imesure) { // microvolts, filtre avec filtre carre 910 double y = (getRawBolo(ibolo, imesure-1) + getRawBolo(ibolo, imesure))/2.; 911 //if (imesure%2) y=-y; 883 884 return s*bolo_muV(¶m->param, ®lage->reglage, val_DS(ibolo,imesure), ibolo); 885 } 886 887 double ArcheopsFile::getBoloRawMuVCN(int ibolo, int imesure) { 888 // Si pas bloc comprime -> 1 bit 889 int lastbit = 1; 890 if (!(lastBoloComp() == NULL) && 891 (numero_block(lastBoloComp()) != numero_block(lastBolo()))) { 892 unsigned int4* data = lastBoloComp()->data_bolo[ibolo]; 893 // Les deux premieres valeurs sont codees directement... 894 if (imesure>=2) { 895 int iExp = (imesure-2)/4 + 1; 896 int expo = data[iExp] & 0xf; 897 lastbit = 1 << expo; 898 } 899 } 912 900 block_type_reglage* reglage = lastReglage(); 913 901 block_type_param* param = lastParam(); 914 902 if (!reglage) return 0; 915 903 if (!param) return 0; 916 //cout << "muv " << imesure << " " << y << "\n"; 917 return bol_micro_volt(y,(double)param->param.bolo[ibolo].bolo_gain*gain_ampli(reglage->reglage.bolo[ibolo])); 918 //return ((1e5*y)/(65536.*gain_ampli(reglage->reglage.bolo[ibolo]))); 919 } 920 921 double ArcheopsFile::getMuVBoloCN(int ibolo, int imesure) { // microvolts, sur valeur unique 922 double y = getRawBoloCN(ibolo, imesure); 923 block_type_reglage* reglage = lastReglage(); 924 block_type_param* param = lastParam(); 925 if (!reglage) return 0; 926 if (!param) return 0; 927 return bol_micro_volt(y,(double)param->param.bolo[ibolo].bolo_gain*gain_ampli(reglage->reglage.bolo[ibolo])); 928 } 929 930 931 double ArcheopsFile::getMuVBolo2(int ibolo, int imesure) { // microvolts, filtre 904 double noise = ( 905 bolo_muV(¶m->param, ®lage->reglage, lastbit, ibolo) - 906 bolo_muV(¶m->param, ®lage->reglage, 0, ibolo)) /2.; 907 908 return noise; 909 } 910 911 912 913 def_gains 914 915 double ArcheopsFile::getBoloMuV(int ibolo, int imesure) { // microvolts, filtre avec filtre carre 916 double y = (getBoloRawMuV(ibolo, imesure-1) + getBoloRawMuV(ibolo, imesure))/2.; 917 return y; 918 } 919 920 double ArcheopsFile::getBoloMuV2(int ibolo, int imesure) { // microvolts, filtre 932 921 // On commence par trouver la valeur d'offset, en fittant une droite sur les soustractions 933 922 if (!lastBolo() || !llastBolo()) return 0; 934 block_type_reglage* reglage = lastReglage();935 block_type_param* param = lastParam();936 if (!reglage) return 0;937 if (!param) return 0;923 //block_type_reglage* reglage = lastReglage(); 924 //block_type_param* param = lastParam(); 925 //if (!reglage) return 0; 926 //if (!param) return 0; 938 927 double sumx=0, sumy=0, sumxy=0, sumx2=0; 939 928 int n=20; … … 941 930 for (int i=1; i<=n; i++) { 942 931 double x = -i; 943 double y = s*(get RawBolo(ibolo, imesure-i+1) - getRawBolo(ibolo, imesure-i))/2;932 double y = s*(getBoloRawMuV(ibolo, imesure-i+1) - getBoloRawMuV(ibolo, imesure-i))/2; 944 933 s = -s; 945 934 sumx += x; … … 951 940 double b = (sumy/n) - a*(sumx/n); 952 941 s = imesure % 2 ? 1 : -1; 953 double y = get RawBolo(ibolo, imesure);942 double y = getBoloRawMuV(ibolo, imesure); 954 943 y = y-s*b; 955 return bol_micro_volt(y,(double)param->param.bolo[ibolo].bolo_gain*gain_ampli(reglage->reglage.bolo[ibolo])); 956 } 944 return y; 945 } 946 947 /* 948 double ArcheopsFile::getBoloMuV2(int ibolo, int imesure) { // microvolts, filtre 949 // On commence par trouver la valeur d'offset, en fittant une droite sur les soustractions 950 if (!lastBolo() || !llastBolo()) return 0; 951 double sumx=0, sumy=0, sumxy=0, sumx2=0; 952 int n=20; 953 int s = (imesure-n) % 2 ? 1 : -1; 954 static double* data = NULL; 955 if (!data) data = new double[n+1]; 956 for (int i=0; i<=n; i++) { 957 data[i] = getBoloRawMuV(ibolo, imesure-n+i); 958 } 959 for (int i=0; i<=n; i++) { 960 961 } 962 for (int i=1; i<=n; i++) { 963 double x = -i; 964 double y = s*(getBoloRawMuV(ibolo, imesure-i+1) - getBoloRawMuV(ibolo, imesure-i))/2; 965 s = -s; 966 sumx += x; 967 sumy += y; 968 sumxy += x*y; 969 sumx2 += x*x; 970 } 971 double a = (sumxy/n - (sumx/n)*(sumy/n)) / (sumx2/n - (sumx/n)*(sumx/n)); 972 double b = (sumy/n) - a*(sumx/n); 973 s = imesure % 2 ? 1 : -1; 974 double y = getBoloRawMuV(ibolo, imesure); 975 y = y-s*b; 976 return y; 977 } 978 */ 979 957 980 958 981 double ArcheopsFile::getGainAmpli(int ibolo) { … … 960 983 } 961 984 962 #define capa(uu) ((parametr.bolo[uu].bolo_bebo==10)?0.000868 * (double)parametr.bolo[uu].bolo_capa:0.001 * (double)parametr.bolo[uu].bolo_capa) // capa en pF963 #define pt_micA(uu) ((4096. * 22. * 20.) / capa(uu) ) // pts / micro Amperes964 965 966 #define pt_micV(uu) (((double)parametr.bolo[uu].bolo_diviseur) / 2441.) // pts / microvolt967 968 985 969 986 double ArcheopsFile::getDACV(int ibolo) { 970 double dacV = dac_V(lastReglage()->reglage.bolo[ibolo]); 971 param_bolo& parametr = lastParam()->param; 972 return dacV / pt_micV(ibolo); 987 block_type_reglage* reglage = lastReglage(); 988 block_type_param* param = lastParam(); 989 if (!reglage) return 0; 990 if (!param) return 0; 991 return DAC_muV(¶m->param, ®lage->reglage, ibolo); 973 992 } 974 993 975 994 double ArcheopsFile::getDACI(int ibolo) { 976 double dacI = dac_I(lastReglage()->reglage.bolo[ibolo]); 977 param_bolo& parametr = lastParam()->param; 978 return dacI / pt_micA(ibolo); 979 } 980 981 double ArcheopsFile::getMuVBolo2T(int ibolo, int imesure) { 982 return getMuVBolo2(ibolo, imesure) - getDACV(ibolo); 995 block_type_reglage* reglage = lastReglage(); 996 block_type_param* param = lastParam(); 997 if (!reglage) return 0; 998 if (!param) return 0; 999 return DAC_muA(¶m->param, ®lage->reglage, ibolo); 1000 } 1001 1002 double ArcheopsFile::getBoloMuV2T(int ibolo, int imesure) { 1003 return getDACV(ibolo) - getBoloMuV2(ibolo, imesure) ; 983 1004 } 984 1005 985 1006 double ArcheopsFile::getBoloRes(int ibolo, int imesure) { 986 1007 double i = getDACI(ibolo); // microAmps 987 double v = get MuVBolo2T(ibolo, imesure); // microVolts1008 double v = getBoloMuV2T(ibolo, imesure); // microVolts 988 1009 double r = v/i; // Ohms 989 1010 return r; 990 1011 } 1012 1013 double ArcheopsFile::getBoloTemp(int ibolo, int imesure) { 1014 double r = getBoloRes(ibolo, imesure); 1015 block_type_reglage* reglage = lastReglage(); 1016 block_type_param* param = lastParam(); 1017 if (!reglage) return 0; 1018 if (!param) return 0; 1019 return bolo_temp(¶m->param, ®lage->reglage, r, ibolo); 1020 } 1021 991 1022 992 1023 // Dilution
Note:
See TracChangeset
for help on using the changeset viewer.