Changeset 254 for drsdaq/HVFeedback.cc
- Timestamp:
- 07/20/10 13:20:47 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
drsdaq/HVFeedback.cc
r229 r254 30 30 31 31 m = DAQClass; 32 33 32 fNumberOfChannels = m->GetBoard(0)->GetNumberOfChannels(); 34 33 fNumberOfChips = m->GetBoard(0)->GetNumberOfChips(); … … 77 76 } 78 77 79 PrintConfig(MsgToLog);80 81 78 // 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); 87 85 88 86 // Initial state … … 98 96 HVFeedback::~HVFeedback() { 99 97 98 delete FeedbackState; 100 99 delete CountService; 101 100 delete FeedbackAverage; … … 105 104 106 105 delete[] Average; delete[] Response; 107 delete[] DIMAverage; 106 delete[] DIMAverage; delete[] DIMSigma; 108 107 delete[] Sigma; 109 108 delete[] Target; delete[] Buffer; … … 159 158 160 159 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 162 162 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 164 166 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]) { 169 169 Cmd << PixMap->DRS_to_Pixel(i,j,k)+" " << std::showpos << Correction << " "; 170 170 } … … 184 184 case FB_ResponseSecond: // Determine response from signal variation 185 185 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); 187 187 Response[i][j][k] = 0; 188 188 } … … 211 211 case FB_Targets: 212 212 FeedbackTarget->updateService(); 213 m->PrintMessage("HV Feedback: New targets set, switching off .\n");213 m->PrintMessage("HV Feedback: New targets set, switching off\n"); 214 214 SetFBMode(FB_Off, true); 215 215 break; 216 216 case FB_ResponseFirst: 217 217 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); 219 219 break; 220 220 case FB_ResponseSecond: 221 221 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"); 223 223 SetFBMode(FB_Off, true); 224 224 break; … … 277 277 void HVFeedback::SetFBMode(FBState Mode, bool Internal) { 278 278 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"); 280 280 else { 281 281 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); 284 284 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)); 285 290 } 286 291 } … … 374 379 // Print feedback configuration 375 380 // 376 void HVFeedback::PrintConfig( int Target) {377 378 m->PrintMessage( Target,"LedTrigBoard: %d\t\tLedTrigChip: %d\t\tLedTrigChannel: %d\n"381 void HVFeedback::PrintConfig() { 382 383 m->PrintMessage("LedTrigBoard: %d\t\tLedTrigChip: %d\t\tLedTrigChannel: %d\n" 379 384 "LedTrigSample: %d\tLedTrigThreshold: %.2f\n" 380 385 "LedSignalSample: %d\tLedBaselineSample: %d\tDefaultNumAverage: %d\n"
Note:
See TracChangeset
for help on using the changeset viewer.