Ignore:
Timestamp:
08/12/09 12:15:02 (15 years ago)
Author:
ogrimm
Message:
Number of HV boards (almost) unlimited.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • hvcontrol/src/HVCalib.cc

    r90 r100  
    77                sabrina.stark@phys.ethz.ch
    88
    9   Contents:     Class reading the calibration tabel for DAC to HV values
     9  Contents:     Class reading the calibration table for DAC to HV values
    1010
    1111\*************************************************************************/
     
    2424HVCalib::HVCalib(HVConfig* hvConfig) {
    2525
    26   char calibfile[80];
    27   int idac, idacOld;
    28   int istep, ihv1000, ihvOld;
    29   char dLine[6000];
     26  char calibfile[80], dLine[6000];
     27  int idac, idacOld, istep, ihv1000, ihvOld;
    3028  bool first = true;
    3129  float hv1000,dac;
    3230  double intpart;
    3331
    34   iDACMin = hvConfig->DACMin;
    35   fHVCalibSlope = hvConfig->fHVCalibSlope;
    36   NDACValues = hvConfig->DACMax - hvConfig->DACMin;
     32  Config = hvConfig;
     33 
     34  iDACMin = Config->DACMin;
     35  fHVCalibSlope = Config->fHVCalibSlope;
     36  NDACValues = Config->DACMax - Config->DACMin;
    3737  NHVValues = 10*NDACValues;
    3838
    39 
    40   HVArray = new double***[hvConfig->NumHVBoards];
    41   for(int i=0; i<hvConfig->NumHVBoards; i++) {
    42     HVArray[i] = new double**[NUM_CHAINS];
     39  HVArray = new double*** [Config->NumHVBoards];
     40  DACArray = new int*** [Config->NumHVBoards];
     41  for(int i=0; i<Config->NumHVBoards; i++) {
     42    HVArray[i] = new double** [NUM_CHAINS];
     43    DACArray[i] = new int** [NUM_CHAINS];
    4344    for(int j=0; j<NUM_CHAINS; j++) {
    44       HVArray[i][j] = new double*[NUM_CHANNELS];
     45      HVArray[i][j] = new double* [NUM_CHANNELS];
     46      DACArray[i][j] = new int* [NUM_CHANNELS];
    4547      for(int k=0; k<NUM_CHANNELS; k++) {
    46         HVArray[i][j][k] = new double[NDACValues];
     48        HVArray[i][j][k] = new double [NDACValues];
     49        DACArray[i][j][k] = new int [NHVValues];
    4750      }
    4851    }
    4952  }
    5053
    51   DACArray = new int***[hvConfig->NumHVBoards];
    52   for(int i=0; i<hvConfig->NumHVBoards; i++) {
    53     DACArray[i] = new int**[NUM_CHAINS];
    54     for(int j=0; j<NUM_CHAINS; j++) {
    55       DACArray[i][j] = new int*[NUM_CHANNELS];
    56       for(int k=0; k<NUM_CHANNELS; k++) {
    57         DACArray[i][j][k] = new int[NHVValues];
    58       }
    59     }
    60   }
    61 
    62   for(int i=0; i<hvConfig->NumHVBoards; i++){
     54  for(int i=0; i<Config->NumHVBoards; i++){
    6355    for(int j=0; j<NUM_CHAINS; j++){
    6456      sprintf(calibfile,"Calib/%s_%c%d.txt",hvConfig->fUSBDevice[i],65+j,1);
     
    6860        fin >> dac;
    6961        idacOld = 0;
    70         if ((int) dac >= hvConfig->DACMin) {
     62        if ((int) dac >= Config->DACMin) {
    7163          if (first){
    7264            iDACMin = (int) dac;
     
    7668          istep = idac - idacOld;
    7769          for(int k=0; k<NUM_CHANNELS; k++){
     70            if (idac>=NDACValues) break;
     71
    7872            fin>>HVArray[i][j][k][idac];
     73
    7974            for (int l=1; l<istep;l++){
    8075              HVArray[i][j][k][idac-istep+l] = HVArray[i][j][k][idac-istep] + l*(HVArray[i][j][k][idac]-HVArray[i][j][k][idac-istep])/istep;
     
    9388  }
    9489
    95   for(int i=0; i<hvConfig->NumHVBoards; i++){
    96     for(int j=0;j<NUM_CHAINS;j++){
    97       for(int k=0;k<NUM_CHANNELS;k++){
     90  for(int i=0; i<Config->NumHVBoards; i++){
     91    for(int j=0; j<NUM_CHAINS; j++){
     92      for(int k=0; k<NUM_CHANNELS; k++){
    9893        ihvOld = 0;
    9994        first = true;
    100         for (int l=0; l<NDACValues;l++){
     95        for (int l=0; l<NDACValues; l++){
    10196          if (l == 0){
    10297            ihvOld = 0;
     
    129124HVCalib::~HVCalib() {
    130125
    131 
    132   for (int i=0; i<MAX_NUM_HVBOARDS; i++){
    133     for (int j=0; j<NUM_CHAINS;j++){
    134       for (int k=0; k<NUM_CHANNELS;k++){
    135         delete [] HVArray[i][j][k];
    136         delete [] HVArray;
     126  for(int i=0; i<Config->NumHVBoards; i++) {
     127    for(int j=0; j<NUM_CHAINS; j++) {
     128      for(int k=0; k<NUM_CHANNELS; k++) {
     129        delete[] HVArray[i][j][k];
     130        delete[] DACArray[i][j][k];
    137131      }
     132      delete[] HVArray[i][j];
     133      delete[] DACArray[i][j];
    138134    }
     135    delete[] HVArray[i];
     136    delete[] DACArray[i];
    139137  }
    140 
    141   for (int i=0; i<MAX_NUM_HVBOARDS; i++){
    142     for (int j=0; j<NUM_CHAINS;j++){
    143       for (int k=0; k<NUM_CHANNELS;k++){
    144         delete [] DACArray[i][j][k];
    145         delete [] DACArray;
    146       }
    147     }
    148   }
     138  delete[] HVArray;
     139  delete[] DACArray;
    149140}
    150141
     
    175166      ihv = (int) (hv1000<0 ? ceil(hv1000) : floor(hv1000));
    176167    }
     168    if (ihv >= NHVValues) ihv = NHVValues;
    177169    return DACArray[board][chain][channel][ihv];
    178170  }
    179171}
    180 
Note: See TracChangeset for help on using the changeset viewer.