Changeset 12663


Ignore:
Timestamp:
11/28/11 16:13:13 (13 years ago)
Author:
tbretz
Message:
Changed all references to vcoltages to DAC
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/biasctrl.cc

    r12507 r12663  
    4242    bool fIsVerbose;
    4343
    44     vector<uint16_t> fVoltCmd;     // Current command voltage in DAC units (12bit = 90V)
     44    vector<uint16_t> fDacCmd;     // Current command voltage in DAC units (12bit = 90V)
    4545
    4646    vector<bool>     fPresent;
     
    4949    int64_t fSendCounter;
    5050
    51     int16_t fGlobalVoltCmd;      // Command value to be reached
     51    int16_t fGlobalDacCmd;      // Command value to be reached
    5252//    uint16_t fExpertVoltRef;      // Command value to be reached
    5353
     
    6565
    6666protected:
    67     vector<uint16_t> fVolt;        // Current voltage in DAC units (12bit = 90V)
    68     vector<uint16_t> fVoltRef;     // Current reference voltage in DAC units (12bit = 90V)
    69     vector<uint16_t> fVoltGapd;    // Nominal G-APD voltages at 25deg C
     67    vector<uint16_t> fDac;        // Current voltage in DAC units (12bit = 90V)
     68    vector<uint16_t> fDacRef;     // Current reference voltage in DAC units (12bit = 90V)
     69    vector<uint16_t> fDacGapd;    // Nominal G-APD voltages at 25deg C
    7070
    7171    vector<int16_t>  fCurrent;     // Current in ADC units (12bit = 5mA)
    7272
    73     uint16_t fVoltMaxAbs;
    74     uint16_t fVoltMaxRel;
     73    uint16_t fDacMaxAbs;
     74    uint16_t fDacMaxRel;
    7575
    7676    virtual void UpdateA()
     
    105105            return false;
    106106        }
    107         if (dac>fVoltMaxAbs)
    108         {
    109             str << "DAC value " << dac << " exceeds allowed absolute maximum of " << fVoltMaxAbs;
     107        if (dac>fDacMaxAbs)
     108        {
     109            str << "DAC value " << dac << " exceeds allowed absolute maximum of " << fDacMaxAbs;
    110110            Error(str);
    111111            return false;
    112112        }
    113         if (dac>fVoltGapd[ch]+fVoltMaxRel)
    114         {
    115             str << "DAC value " << dac << " exceeds allowed channel maximum of " << fVoltGapd[ch] << " + " << fVoltMaxRel;
     113        if (dac>fDacGapd[ch]+fDacMaxRel)
     114        {
     115            str << "DAC value " << dac << " exceeds allowed channel maximum of " << fDacGapd[ch] << " + " << fDacMaxRel;
    116116            Error(str);
    117117            return false;
     
    251251            {
    252252                for (int i=0; i<kNumChannels; i++)
    253                     fVolt[i] = fGlobalVoltCmd;
    254 
    255                 fGlobalVoltCmd = -1;
     253                    fDac[i] = fGlobalDacCmd;
     254
     255                fGlobalDacCmd = -1;
    256256
    257257                return true;
     
    293293
    294294        if (cmd==kCmdChannelSet)
    295             fVolt[id] = fVoltCmd[id];
     295            fDac[id] = fDacCmd[id];
    296296
    297297        return true;
     
    584584        if (fWrapCounter<0)
    585585        {
    586             fVolt.assign(   kNumChannels, 0);
    587             fVoltRef.assign(kNumChannels, 0);
    588             fVoltCmd.assign(kNumChannels, 0);
     586            fDac.assign(   kNumChannels, 0);
     587            fDacRef.assign(kNumChannels, 0);
     588            fDacCmd.assign(kNumChannels, 0);
    589589        }
    590590
     
    592592        fSendCounter    = -1;
    593593        fWrapCounter    = -1;
    594         fGlobalVoltCmd  = -1;
     594        fGlobalDacCmd   = -1;
    595595        fIsInitializing = true;
    596596        fIsRamping      = false;
     
    658658            data.insert(data.end(), cmd.begin(), cmd.end());
    659659
    660             fVoltCmd[ch] = dac[ch];
     660            fDacCmd[ch] = dac[ch];
    661661        }
    662662
     
    673673    uint16_t RampOneStep(uint16_t ch)
    674674    {
    675         if (fVoltRef[ch]>fVolt[ch])
    676             return fVolt[ch]+fRampStep>fVoltRef[ch] ? fVoltRef[ch] : fVolt[ch]+fRampStep;
    677 
    678         if (fVoltRef[ch]<fVolt[ch])
    679             return fVolt[ch]-fRampStep<fVoltRef[ch] ? fVoltRef[ch] : fVolt[ch]-fRampStep;
    680 
    681         return fVolt[ch];
     675        if (fDacRef[ch]>fDac[ch])
     676            return fDac[ch]+fRampStep>fDacRef[ch] ? fDacRef[ch] : fDac[ch]+fRampStep;
     677
     678        if (fDacRef[ch]<fDac[ch])
     679            return fDac[ch]-fRampStep<fDacRef[ch] ? fDacRef[ch] : fDac[ch]-fRampStep;
     680
     681        return fDac[ch];
    682682    }
    683683
     
    701701        {
    702702            dac[ch] = RampOneStep(ch);
    703             if (dac[ch]!=fVolt[ch] && fPresent[ch/kNumChannelsPerBoard])
     703            if (dac[ch]!=fDac[ch] && fPresent[ch/kNumChannelsPerBoard])
    704704                identical = false;
    705705        }
     
    769769        fBufferUpdate(3*kNumChannels),
    770770        fIsVerbose(false),
    771         fVoltCmd(kNumChannels),
    772         //fRefCurrent(kNumChannels),
     771        fDacCmd(kNumChannels),
    773772        fPresent(kNumBoards),
    774773        fWrapCounter(-1),
     
    780779        fWaitingForAnswer(-1),
    781780        fCounter(8),
    782         fVolt(kNumChannels),
    783         fVoltRef(kNumChannels),
    784         fVoltGapd(kNumChannels),
     781        fDac(kNumChannels),
     782        fDacRef(kNumChannels),
     783        fDacGapd(kNumChannels),
    785784        fCurrent(kNumChannels)
    786785    {
     
    807806
    808807        for (int ch=0; ch<kNumChannels; ch++)
    809             dac[ch] = fCurrent[ch]<0 ? 0 : fVolt[ch];
     808            dac[ch] = fCurrent[ch]<0 ? 0 : fDac[ch];
    810809
    811810        SetAllChannels(dac, true);
     
    848847            return false;
    849848
    850         fVoltRef[ch] = dac;
     849        fDacRef[ch] = dac;
    851850
    852851        if (!fIsRamping)
     
    904903        for (size_t ch=0; ch<kNumChannels; ch++)
    905904        {
    906             if (fVoltRef[ch]+dac[ch]>kMaxDac)
     905            if (fDacRef[ch]+dac[ch]>kMaxDac)
    907906            {
    908907                ostringstream msg;
    909                 msg << "AddDac - New voltage reference " << fVoltRef[ch] << "+" << dac[ch] << " out of range [0," << kMaxDac << " for channel " << ch << ".";
     908                msg << "AddDac - New voltage reference " << fDacRef[ch] << "+" << dac[ch] << " out of range [0," << kMaxDac << " for channel " << ch << ".";
    910909                Error(msg);
    911910                return false;
    912911            }
    913912
    914             if (fVoltRef[ch]+dac[ch]<0)
    915                 fVoltRef[ch] = 0;
     913            if (fDacRef[ch]+dac[ch]<0)
     914                fDacRef[ch] = 0;
    916915            else
    917                 fVoltRef[ch] += dac[ch];
     916                fDacRef[ch] += dac[ch];
    918917        }
    919918
     
    966965                return false;
    967966
    968             fVoltRef[ch] = dac[ch];
     967            fDacRef[ch] = dac[ch];
    969968        }
    970969
     
    10201019
    10211020        for (size_t ch=0; ch<kNumChannels; ch++)
    1022             if (fVoltGapd[ch]+dac>kMaxDac)
     1021            if (fDacGapd[ch]+dac>kMaxDac)
    10231022            {
    10241023                ostringstream msg;
    1025                 msg << "SetGapdVoltage - New voltage reference " << fVoltGapd[ch] << "+" << dac << " out of range [0," << kMaxDac << " for channel " << ch << ".";
     1024                msg << "SetGapdVoltage - New voltage reference " << fDacGapd[ch] << "+" << dac << " out of range [0," << kMaxDac << " for channel " << ch << ".";
    10261025                Error(msg);
    10271026                return false;
     
    10291028
    10301029        for (size_t ch=0; ch<kNumChannels; ch++)
    1031             fVoltRef[ch] = fVoltGapd[ch]+dac<0 ? 0 : fVoltGapd[ch]+dac;
     1030            fDacRef[ch] = fDacGapd[ch]+dac<0 ? 0 : fDacGapd[ch]+dac;
    10321031
    10331032        if (!fIsRamping)
     
    10391038    bool SetGapdReferenceCh(uint16_t ch)
    10401039    {
    1041         if (!CheckChDac("SetGapdReferenceCh", fVoltGapd[ch], ch))
    1042             return false;
    1043 
    1044         fVoltRef[ch] = fVoltGapd[ch];
     1040        if (!CheckChDac("SetGapdReferenceCh", fDacGapd[ch], ch))
     1041            return false;
     1042
     1043        fDacRef[ch] = fDacGapd[ch];
    10451044
    10461045        if (!fIsRamping)
     
    10541053    {
    10551054        for (size_t ch=0; ch<kNumChannels; ch++)
    1056             fVoltRef[ch] = 0;
     1055            fDacRef[ch] = 0;
    10571056
    10581057        if (!fIsRamping)
     
    10711070
    10721071        for (size_t i=0; i<kNumChannels; i++)
    1073             fVoltGapd[i] = volt[i]*4096/90;
     1072            fDacGapd[i] = volt[i]*4096/90;
    10741073
    10751074        UpdateVgapd();
     
    11501149            return false;
    11511150
    1152         fVoltCmd[ch] = dac;
     1151        fDacCmd[ch] = dac;
    11531152
    11541153        ostringstream msg;
     
    11821181            return false;
    11831182
    1184         if (fGlobalVoltCmd>=0)
     1183        if (fGlobalDacCmd>=0)
    11851184        {
    11861185            Error("ExpertGlobalSetDac - Still waiting for previous answer to 'GlobalSet'");
     
    11881187        }
    11891188
    1190         fGlobalVoltCmd = dac;
     1189        fGlobalDacCmd = dac;
    11911190
    11921191        ostringstream msg;
     
    12711270            const int id = c+kNumChannelsPerBoard*b;
    12721271            Out() << " ";
    1273             Out() << (fVolt[id]==fVoltRef[id]?kGreen:kRed);
    1274             Out() << setw(5) << fVolt[id]*90/4096. << '/';
    1275             Out() << setw(5) << fVoltRef[id]*90/4096.;
     1272            Out() << (fDac[id]==fDacRef[id]?kGreen:kRed);
     1273            Out() << setw(5) << fDac[id]*90/4096. << '/';
     1274            Out() << setw(5) << fDacRef[id]*90/4096.;
    12761275        }
    12771276        Out() << endl;
     
    13071306        {
    13081307            const int id = c+kNumChannelsPerBoard*b;
    1309             Out() << " " << setw(5) << fVoltGapd[id]*90/4096.;
     1308            Out() << " " << setw(5) << fDacGapd[id]*90/4096.;
    13101309        }
    13111310        Out() << endl;
     
    13521351    void SetVoltMaxAbs(float max)
    13531352    {
    1354         fVoltMaxAbs = max*4096/90;
    1355         if (fVoltMaxAbs>4095)
    1356             fVoltMaxAbs = 4095;
     1353        fDacMaxAbs = max*4096/90;
     1354        if (fDacMaxAbs>4095)
     1355            fDacMaxAbs = 4095;
    13571356        if (max<0)
    1358             fVoltMaxAbs = 0;
     1357            fDacMaxAbs = 0;
    13591358    }
    13601359
    13611360    void SetVoltMaxRel(float max)
    13621361    {
    1363         fVoltMaxRel = max*4096/90;
    1364         if (fVoltMaxRel>4095)
    1365             fVoltMaxRel = 4095;
     1362        fDacMaxRel = max*4096/90;
     1363        if (fDacMaxRel>4095)
     1364            fDacMaxRel = 4095;
    13661365        if (max<0)
    1367             fVoltMaxRel = 0;
     1366            fDacMaxRel = 0;
    13681367    }
    13691368
    13701369    uint16_t GetVoltMaxAbs() const
    13711370    {
    1372         return fVoltMaxAbs * 90./4096;
     1371        return fDacMaxAbs * 90./4096;
    13731372    }
    13741373
    13751374    uint16_t GetVoltMaxRel() const
    13761375    {
    1377         return fVoltMaxRel * 90./4096;
     1376        return fDacMaxRel * 90./4096;
    13781377    }
    13791378
     
    14271426        bool isoff = true;
    14281427        for (int ch=0; ch<kNumChannels; ch++)
    1429             if (fPresent[ch/kNumChannelsPerBoard] && fVolt[ch]!=0)
     1428            if (fPresent[ch/kNumChannelsPerBoard] && fDac[ch]!=0)
    14301429                isoff = false;
    14311430        if (isoff)
     
    14331432
    14341433        for (int ch=0; ch<kNumChannels; ch++)
    1435             if (fPresent[ch/kNumChannelsPerBoard] && fVolt[ch]!=fVoltRef[ch])
     1434            if (fPresent[ch/kNumChannelsPerBoard] && fDac[ch]!=fDacRef[ch])
    14361435                return BIAS::kNotReferenced;
    14371436
     
    14601459    {
    14611460        vector<uint16_t> vec;
    1462         vec.insert(vec.end(), fVolt.begin(),    fVolt.end());
    1463         vec.insert(vec.end(), fVoltRef.begin(), fVoltRef.end());
     1461        vec.insert(vec.end(), fDac.begin(),    fDac.end());
     1462        vec.insert(vec.end(), fDacRef.begin(), fDacRef.end());
    14641463        fDimVoltage.Update(vec);
    14651464    }
     
    14671466    void UpdateVgapd()
    14681467    {
    1469         fDimGapd.Update(fVoltGapd);
     1468        fDimGapd.Update(fDacGapd);
    14701469    }
    14711470
     
    20592058
    20602059        BiasMap map;
    2061         if (!map.Read(conf.Get<string>("bias-map-file")))
    2062         {
    2063             T::Error("Reading reference voltages from "+conf.Get<string>("bias-map-file")+" failed.");
     2060
     2061        if (!conf.Has("bias-map-file") && !conf.Has("bias-database"))
     2062        {
     2063            T::Error("Neither bias-map-file not bias-dtabase specified.");
    20642064            return 5;
    20652065        }
    20662066
     2067        try
     2068        {
     2069            if (conf.Has("bias-map-file"))
     2070                map.Read(conf.Get<string>("bias-map-file"));
     2071
     2072            if (conf.Has("bias-database"))
     2073                map.Retrieve(conf.Get<string>("bias-database"));
     2074        }
     2075        catch (const runtime_error &e)
     2076        {
     2077            T::Error("Getting reference voltages failed: "+string(e.what()));
     2078            return 7;
     2079        }
     2080
    20672081        if (!fBias.SetNewGapdVoltage(map.Vgapd()))
    20682082        {
    20692083            T::Error("Setting reference voltages failed.");
    2070             return 6;
     2084            return 8;
    20712085        }
    20722086
     
    21032117        ("volt-max-rel",    var<float>(2.5),     "Relative upper limit for the voltage w.r.t. the G-APD reference voltage (in Volts)")
    21042118        ("bias-map-file",   var<string>("GAPDmap.txt"), "File with nominal and offset voltages for each channel.")
     2119        ("bias-database",   var<string>(""),      "")
    21052120        ;
    21062121
Note: See TracChangeset for help on using the changeset viewer.