Ignore:
Timestamp:
Sep 24, 1999, 11:23:23 PM (26 years ago)
Author:
ansari
Message:

vendredi soir...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Poubelle/archTOI.old/archeopsfile.cc

    r432 r436  
    99extern "C" {
    1010#include "compress.h"
     11#include "arcunit.h"
    1112}
    1213#include <iostream.h>
     
    257258ArcheopsFile::ArcheopsFile(string const& fname) {
    258259  f = fopen(fname.c_str(), "rb");
     260  setvbuf(f, NULL, _IOFBF, 1024L*1024L);
     261
    259262  fn = fname;
    260263  if (!f) throw ArchExc("file not found");
     
    294297  fn         = x.fn;
    295298  f = fopen(fn.c_str(), "rb");
     299  setvbuf(f, NULL, _IOFBF, 1024L*1024L);
    296300
    297301  rawMJD     = x.rawMJD;
     
    867871
    868872
    869 double ArcheopsFile::getRawBolo(int ibolo, int imesure) {    // donnee brute, avec seulement soustraction offset
    870   int nb_coups,aa; 
     873double ArcheopsFile::getBoloRawMuV(int ibolo, int imesure) {    // microvolts bruts
    871874  block_type_bolo* blk = imesure >= 0 ? lastBolo() : llastBolo();
    872   //cout << "raw " << imesure << " ";
    873875  if (imesure < 0) imesure += nEchBlock();
     876  block_type_reglage* reglage = lastReglage();
     877  block_type_param*   param = lastParam();
    874878  if (!blk) return 0;
    875   block_type_reglage* reglage = lastReglage();
    876879  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
    881882  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(&param->param, &reglage->reglage, val_DS(ibolo,imesure), ibolo);
     885}
     886
     887double 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  }
    912900  block_type_reglage* reglage = lastReglage();
    913901  block_type_param*   param = lastParam();
    914902  if (!reglage) return 0;
    915903  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(&param->param, &reglage->reglage, lastbit, ibolo) -
     906    bolo_muV(&param->param, &reglage->reglage, 0, ibolo)) /2.;
     907
     908  return noise;
     909}
     910
     911
     912
     913def_gains
     914
     915double 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
     920double ArcheopsFile::getBoloMuV2(int ibolo, int imesure) { // microvolts, filtre
    932921  // On commence par trouver la valeur d'offset, en fittant une droite sur les soustractions
    933922  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;
    938927  double sumx=0, sumy=0, sumxy=0, sumx2=0;
    939928  int n=20;
     
    941930  for (int i=1; i<=n; i++) {
    942931    double x = -i;
    943     double y = s*(getRawBolo(ibolo, imesure-i+1) - getRawBolo(ibolo, imesure-i))/2;
     932    double y = s*(getBoloRawMuV(ibolo, imesure-i+1) - getBoloRawMuV(ibolo, imesure-i))/2;
    944933    s = -s;
    945934    sumx += x;
     
    951940  double b = (sumy/n) - a*(sumx/n);
    952941  s = imesure % 2 ? 1 : -1;
    953   double y = getRawBolo(ibolo, imesure);
     942  double y = getBoloRawMuV(ibolo, imesure);
    954943  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/*
     948double 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
    957980
    958981double ArcheopsFile::getGainAmpli(int ibolo) {
     
    960983}
    961984
    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 pF
    963 #define pt_micA(uu)     ((4096. * 22. * 20.) / capa(uu) )                       //  pts / micro Amperes
    964 
    965 
    966 #define pt_micV(uu)     (((double)parametr.bolo[uu].bolo_diviseur) / 2441.)     // pts / microvolt
    967 
    968985
    969986double 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(&param->param, &reglage->reglage, ibolo);
    973992}
    974993
    975994double 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(&param->param, &reglage->reglage, ibolo);
     1000}
     1001
     1002double ArcheopsFile::getBoloMuV2T(int ibolo, int imesure) {
     1003  return getDACV(ibolo) - getBoloMuV2(ibolo, imesure) ;
    9831004}
    9841005
    9851006double ArcheopsFile::getBoloRes(int ibolo, int imesure) {
    9861007  double i = getDACI(ibolo); // microAmps
    987   double v = getMuVBolo2T(ibolo, imesure); // microVolts
     1008  double v = getBoloMuV2T(ibolo, imesure); // microVolts
    9881009  double r = v/i; // Ohms
    9891010  return r;
    9901011}
     1012
     1013double 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(&param->param, &reglage->reglage, r, ibolo);
     1020}
     1021
    9911022
    9921023// Dilution
Note: See TracChangeset for help on using the changeset viewer.