Changeset 254 for drsdaq/HVFeedback.cc


Ignore:
Timestamp:
07/20/10 13:20:47 (14 years ago)
Author:
ogrimm
Message:
Replaced mutex by Lock()/Unlock() from Evidence class, added feedback state service
File:
1 edited

Legend:

Unmodified
Added
Removed
  • drsdaq/HVFeedback.cc

    r229 r254  
    3030
    3131  m = DAQClass;
    32 
    3332  fNumberOfChannels = m->GetBoard(0)->GetNumberOfChannels();
    3433  fNumberOfChips = m->GetBoard(0)->GetNumberOfChips(); 
     
    7776  }
    7877 
    79   PrintConfig(MsgToLog);
    80 
    8178  // Provide DIM services
    82   FeedbackAverage = new DimService (SERVER_NAME"/Average", "F", DIMAverage, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
    83   FeedbackSigma = new DimService (SERVER_NAME"/Sigma", "F", DIMSigma, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
    84   FeedbackResponse = new DimService (SERVER_NAME"/Response", "F", Response, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
    85   FeedbackTarget = new DimService (SERVER_NAME"/Target", "F", Target, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
    86   CountService = new DimService (SERVER_NAME"/Count", Count);
     79  FeedbackAverage = new DimService ("Feedback/Average", "F", DIMAverage, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
     80  FeedbackSigma = new DimService ("Feedback/Sigma", "F", DIMSigma, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
     81  FeedbackResponse = new DimService ("Feedback/Response", "F", Response, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
     82  FeedbackTarget = new DimService ("Feedback/Target", "F", Target, m->NumBoards*kNumberOfChipsMax*kNumberOfChannelsMax*sizeof(float));
     83  CountService = new DimService ("Feedback/Count", Count);
     84  FeedbackState = new DimService ("Feedback/State", "I:1;C", NULL, 0);
    8785
    8886  // Initial state
     
    9896HVFeedback::~HVFeedback() {
    9997
     98  delete FeedbackState;
    10099  delete CountService;
    101100  delete FeedbackAverage;
     
    105104
    106105  delete[] Average;     delete[] Response;
    107   delete[] DIMAverage;          delete[] DIMSigma;
     106  delete[] DIMAverage; delete[] DIMSigma;
    108107  delete[] Sigma;
    109108  delete[] Target;      delete[] Buffer;
     
    159158       
    160159        switch (FBMode) {
    161           case FB_Active:   // Determine correction from response maxtrix and change voltages
     160          case FB_Active:
     161                // Determine correction from response maxtrix and change voltages
    162162            Correction = -(Target[i][j][k] - Average[i][j][k])*Response[i][j][k]*Gain;
    163         if (fabs(Correction) > 0.1) Correction = fabs(Correction)/Correction*0.1;   // Limit changes to 100 mV
     163        // Limit voltage steps
     164                if (fabs(Correction) > 0.1) Correction = fabs(Correction)/Correction*0.1;   // Limit changes to 100 mV
     165                // Check if voltage change command possible
    164166                if(Correction==0 || Target[i][j][k]==0 || PixMap->DRS_to_Pixel(i,j,k).empty()) break;
    165         printf("Average of board %d, chip %d, channel %d is %.2f +/- %.2f    Correction %.3f\n",i,j,k,Average[i][j][k],Sigma[i][j][k],Correction);
    166 
    167                 if(fabs(Average[i][j][k]) < 2*Sigma[i][j][k]) printf("Too noisy!\n");
    168                 else {
     167                // Add voltage change command if not too noisy
     168                if(fabs(Average[i][j][k]) > 2*Sigma[i][j][k]) {
    169169                  Cmd << PixMap->DRS_to_Pixel(i,j,k)+" " << std::showpos << Correction << " ";
    170170                }
     
    184184          case FB_ResponseSecond: // Determine response from signal variation
    185185            if(Buffer[i][j][k] == Average[i][j][k]) {
    186               m->PrintMessage("HV Feedback: Warning, response singular for board %d, chip %d, channel %d.\n",i,j,k);
     186              m->PrintMessage("HV Feedback: Warning, response singular for board %d, chip %d, channel %d\n",i,j,k);
    187187              Response[i][j][k] = 0;
    188188            }
     
    211211    case FB_Targets:
    212212          FeedbackTarget->updateService();
    213       m->PrintMessage("HV Feedback: New targets set, switching off.\n");
     213      m->PrintMessage("HV Feedback: New targets set, switching off\n");
    214214      SetFBMode(FB_Off, true);
    215215      break;
    216216    case FB_ResponseFirst:
    217217      SetFBMode(FB_ResponseSecond, true);
    218       m->PrintMessage("HV Feedback: Increasing voltages by %f for response measurement, acquiring data.\n", DiffVoltage);
     218      m->PrintMessage("HV Feedback: Increasing voltages by %f for response measurement, acquiring data\n", DiffVoltage);
    219219      break;
    220220    case FB_ResponseSecond:
    221221          FeedbackResponse->updateService();
    222       m->PrintMessage("HV Feedback: Response measurements finished, original voltages set, switching off.\n");
     222      m->PrintMessage("HV Feedback: Response measurements finished, original voltages set, switching off\n");
    223223      SetFBMode(FB_Off, true);
    224224      break;
     
    277277void HVFeedback::SetFBMode(FBState Mode, bool Internal) {
    278278  if((Mode==FB_ResponseFirst || Mode==FB_ResponseFirst) && !Internal)
    279       m->PrintMessage("Start reponse measurement by calling MeasureResponse().\n");
     279      m->PrintMessage("Start reponse measurement by calling MeasureResponse()\n");
    280280  else {
    281281    FBMode = Mode;
    282         if (Mode != FB_ResponseFirst) m->Message(m->INFO, "%s", FBState_Description[FBMode]);
    283         else m->Message(m->INFO, "%s (voltage difference %.3f)", FBState_Description[FBMode], DiffVoltage);
     282        if (Mode != FB_ResponseFirst) m->PrintMessage("%s\n", FBState_Description[FBMode]);
     283        else m->PrintMessage("%s (voltage difference %.3f)\n", FBState_Description[FBMode], DiffVoltage);
    284284    ClearAverages();
     285       
     286        // Update state service
     287        State.State = FBMode;
     288        strncpy(State.Text, FBState_Description[FBMode], sizeof(State.Text));
     289        FeedbackState->updateService(&State, sizeof(State));
    285290  }
    286291}
     
    374379// Print feedback configuration
    375380//
    376 void HVFeedback::PrintConfig(int Target) {
    377 
    378   m->PrintMessage(Target, "LedTrigBoard: %d\t\tLedTrigChip: %d\t\tLedTrigChannel: %d\n"
     381void HVFeedback::PrintConfig() {
     382
     383  m->PrintMessage("LedTrigBoard: %d\t\tLedTrigChip: %d\t\tLedTrigChannel: %d\n"
    379384        "LedTrigSample: %d\tLedTrigThreshold: %.2f\n"
    380385        "LedSignalSample: %d\tLedBaselineSample: %d\tDefaultNumAverage: %d\n"
Note: See TracChangeset for help on using the changeset viewer.