Changeset 4752 for trunk/MagicSoft/Mars/mcalib
- Timestamp:
- 08/27/04 11:36:24 (21 years ago)
- Location:
- trunk/MagicSoft/Mars/mcalib
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc
r4639 r4752 265 265 } 266 266 267 // Sizes might have changed 268 if (fPedestalFlag && (Int_t)fPedestal->GetSize() != fSignals->GetSize()) 269 { 270 *fLog << err << "Size mismatch of MPedestalCam and MCalibrationCam... abort." << endl; 271 return kFALSE; 272 } 273 267 274 if(fCalibrationMode == kBlindPixel && !fQEs->IsBlindPixelMethodValid()) 268 275 { … … 315 322 316 323 if (TestPedestalFlag(kRun)) 317 if (!CalibratePedestal()) 318 return kFALSE; 324 Calibrate(kFALSE, kTRUE); 319 325 320 326 return kTRUE; … … 323 329 // -------------------------------------------------------------------------- 324 330 // 325 // Calibrate the Pedestal values326 //327 Bool_t MCalibrateData::CalibratePedestal()328 {329 //330 // Fill MPedPhot container using the informations from331 // MPedestalCam, MExtractedSignalCam and MCalibrationCam332 //333 const Float_t slices = fSignals->GetNumUsedHiGainFADCSlices();334 const Float_t sqrtslices = TMath::Sqrt(slices);335 336 // is pixid equal to pixidx ?337 if ((Int_t)fPedestal->GetSize() != fSignals->GetSize())338 {339 *fLog << err << "Sizes of MPedestalCam and MCalibrationCam are different" << endl;340 return kFALSE;341 }342 343 const Int_t n = fPedestal->GetSize();344 for (Int_t pixid=0; pixid<n; pixid++)345 {346 const MPedestalPix &ped = (*fPedestal)[pixid];347 348 // pedestals/(used FADC slices) in [ADC] counts349 const Float_t pedes = ped.GetPedestal() * slices;350 const Float_t pedrms = ped.GetPedestalRms() * sqrtslices;351 352 //353 // get phe/ADC conversion factor354 //355 Float_t hiloconv;356 Float_t hiloconverr;357 Float_t calibConv;358 Float_t calibConvVar;359 Float_t calibFFactor;360 if (!GetConversionFactor(pixid, hiloconv, hiloconverr,361 calibConv, calibConvVar, calibFFactor))362 continue;363 364 //365 // pedestals/(used FADC slices) in [number of photons]366 //367 const Float_t pedphot = pedes * calibConv;368 const Float_t pedphotrms = pedrms * calibConv;369 370 (*fPedPhot)[pixid].Set(pedphot, pedphotrms);371 }372 373 fPedPhot->SetReadyToSave();374 375 return kTRUE;376 }377 378 // --------------------------------------------------------------------------379 //380 331 // Get conversion factor and its error from MCalibrationCam 381 332 // 382 333 Bool_t MCalibrateData::GetConversionFactor(UInt_t pixidx, Float_t &hiloconv, Float_t &hiloconverr, 383 Float_t &calibConv, Float_t &calibConvVar, Float_t &calibFFactor) 334 Float_t &calibConv, Float_t &calibConvVar, 335 Float_t &calibFFactor) const 384 336 { 385 337 // … … 486 438 } 487 439 488 void MCalibrateData::CalibrateData() 489 { 490 const UInt_t npix = fSignals->GetSize(); 440 void MCalibrateData::Calibrate(Bool_t data, Bool_t pedestal) const 441 { 442 if (!data && !pedestal) 443 return; 444 445 const UInt_t npix = fSignals->GetSize(); 446 const Float_t slices = fSignals->GetNumUsedHiGainFADCSlices(); 447 const Float_t sqrtslices = TMath::Sqrt(slices); 491 448 492 449 Float_t hiloconv; 493 450 Float_t hiloconverr; 494 Float_t calib rationConversionFactor;495 Float_t calib rationConversionFactorErr;451 Float_t calibConv; 452 Float_t calibConvErr; 496 453 Float_t calibFFactor; 497 454 … … 499 456 { 500 457 if (!GetConversionFactor(pixidx, hiloconv, hiloconverr, 501 calib rationConversionFactor, calibrationConversionFactorErr, calibFFactor))458 calibConv, calibConvErr, calibFFactor)) 502 459 continue; 503 460 504 const MExtractedSignalPix &sig = (*fSignals)[pixidx]; 505 506 Float_t signal = 0; 507 Float_t signalErr = 0.; 508 509 if (sig.IsLoGainUsed()) 510 { 511 signal = sig.GetExtractedSignalLoGain()*hiloconv; 512 signalErr = signal*hiloconverr; 513 } 514 else 515 { 516 if (sig.GetExtractedSignalHiGain() <= 9999.) 517 signal = sig.GetExtractedSignalHiGain(); 518 } 519 520 const Float_t nphot = signal*calibrationConversionFactor; 521 const Float_t nphotErr = calibFFactor*TMath::Sqrt(TMath::Abs(nphot)); 522 523 // 524 // The following part is the commented first version of the error calculation 525 // Contact Markus Gaug for questions (or wait for the next documentation update...) 526 // 527 /* 528 nphotErr = signal > 0 ? signalErr*signalErr / (signal * signal) : 0. 529 + calibConv > 0 ? calibConvVar / (calibConv * calibConv ) : 0.; 530 nphotErr = TMath::Sqrt(nphotErr) * nphot; 531 */ 532 533 MCerPhotPix *cpix = fCerPhotEvt->AddPixel(pixidx, nphot, nphotErr); 534 535 if (sig.GetNumHiGainSaturated() > 0) 536 cpix->SetPixelHGSaturated(); 537 538 if (sig.GetNumLoGainSaturated() > 0) 539 cpix->SetPixelSaturated(); 540 } 541 542 fCerPhotEvt->FixSize(); 543 fCerPhotEvt->SetReadyToSave(); 461 if (data) 462 { 463 const MExtractedSignalPix &sig = (*fSignals)[pixidx]; 464 465 Float_t signal = 0; 466 Float_t signalErr = 0.; 467 468 if (sig.IsLoGainUsed()) 469 { 470 signal = sig.GetExtractedSignalLoGain()*hiloconv; 471 signalErr = signal*hiloconverr; 472 } 473 else 474 { 475 if (sig.GetExtractedSignalHiGain() <= 9999.) 476 signal = sig.GetExtractedSignalHiGain(); 477 } 478 479 const Float_t nphot = signal*calibConv; 480 const Float_t nphotErr = calibFFactor*TMath::Sqrt(TMath::Abs(nphot)); 481 482 // 483 // The following part is the commented first version of the error calculation 484 // Contact Markus Gaug for questions (or wait for the next documentation update...) 485 // 486 /* 487 nphotErr = signal > 0 ? signalErr*signalErr / (signal * signal) : 0. 488 + calibConv > 0 ? calibConvVar / (calibConv * calibConv ) : 0.; 489 nphotErr = TMath::Sqrt(nphotErr) * nphot; 490 */ 491 492 MCerPhotPix *cpix = fCerPhotEvt->AddPixel(pixidx, nphot, nphotErr); 493 494 if (sig.GetNumHiGainSaturated() > 0) 495 cpix->SetPixelHGSaturated(); 496 497 if (sig.GetNumLoGainSaturated() > 0) 498 cpix->SetPixelSaturated(); 499 } 500 if (pedestal) 501 { 502 const MPedestalPix &ped = (*fPedestal)[pixidx]; 503 504 // pedestals/(used FADC slices) in [ADC] counts 505 const Float_t pedes = ped.GetPedestal() * slices; 506 const Float_t pedrms = ped.GetPedestalRms() * sqrtslices; 507 508 // 509 // pedestals/(used FADC slices) in [number of photons] 510 // 511 const Float_t pedphot = pedes * calibConv; 512 const Float_t pedphotrms = pedrms * calibConv; 513 514 (*fPedPhot)[pixidx].Set(pedphot, pedphotrms); 515 } 516 } 517 518 if (pedestal) 519 fPedPhot->SetReadyToSave(); 520 521 if (data) 522 { 523 fCerPhotEvt->FixSize(); 524 fCerPhotEvt->SetReadyToSave(); 525 } 544 526 } 545 527 … … 563 545 */ 564 546 565 if (fCalibrationMode!=kSkip) 566 CalibrateData(); 567 568 if (TestPedestalFlag(kEvent)) 569 if (!CalibratePedestal()) 570 return kFALSE; 571 572 return kTRUE; 547 Calibrate(fCalibrationMode!=kSkip, TestPedestalFlag(kEvent)); 548 return kTRUE; 573 549 } 574 550 -
trunk/MagicSoft/Mars/mcalib/MCalibrateData.h
r4632 r4752 53 53 TString fNamePedPhotContainer; // name of fPedPhot 54 54 55 Bool_t CalibratePedestal(); 56 void CalibrateData(); 55 void Calibrate(Bool_t data, Bool_t pedestal) const; 57 56 58 Bool_t GetConversionFactor(UInt_t, Float_t &, Float_t &, Float_t &, Float_t &, Float_t &) ;57 Bool_t GetConversionFactor(UInt_t, Float_t &, Float_t &, Float_t &, Float_t &, Float_t &) const; 59 58 60 59 Int_t PreProcess(MParList *pList);
Note:
See TracChangeset
for help on using the changeset viewer.