From abb20887156c6a93f91659663e241f86c10beba6 Mon Sep 17 00:00:00 2001 From: marian Date: Thu, 2 Sep 2010 11:20:39 +0000 Subject: [PATCH] AliTPCcalibDButil and Summary text: Extract occupancy, Qmax, and Qtot per sector from QA OCDB entry. Peter Christiansen --- TPC/AliTPCcalibDButil.cxx | 88 +++++++++++++++++++++++++++++++++++++- TPC/AliTPCcalibDButil.h | 1 + TPC/AliTPCcalibSummary.cxx | 13 +++++- 3 files changed, 99 insertions(+), 3 deletions(-) diff --git a/TPC/AliTPCcalibDButil.cxx b/TPC/AliTPCcalibDButil.cxx index 084c40cd968..0d5ba0c25a8 100644 --- a/TPC/AliTPCcalibDButil.cxx +++ b/TPC/AliTPCcalibDButil.cxx @@ -477,6 +477,90 @@ void AliTPCcalibDButil::ProcessNoiseData(TVectorD &vNoiseMean, TVectorD &vNoiseM } } +//_____________________________________________________________________________________ +void AliTPCcalibDButil::ProcessQAData(TVectorD &vQaOcc, TVectorD &vQaQtot, + TVectorD &vQaQmax) +{ + // + // process QA data + // + // vQaOcc/Qtot/Qmax contains the Mean occupancy/Qtot/Qmax for each sector + // + + + const UInt_t infoSize = 72; + //reset counters to error number + vQaOcc.ResizeTo(infoSize); + vQaOcc.Zero(); + vQaQtot.ResizeTo(infoSize); + vQaQtot.Zero(); + vQaQmax.ResizeTo(infoSize); + vQaQmax.Zero(); + //counter + //retrieve pulser and ALTRO data + + if (!fDataQA) { + + AliInfo("No QA data"); + return; + } + if (fDataQA->GetEventCounter()<=0) { + + AliInfo("No QA data"); + return; // no data processed + } + // + fDataQA->Analyse(); + + TVectorD normOcc(infoSize); + TVectorD normQ(infoSize); + + for (UInt_t isec=0;isecGetNoThreshold()->GetCalROC(isec); + AliTPCCalROC* nclusterROC = fDataQA->GetNLocalMaxima()->GetCalROC(isec); + AliTPCCalROC* qROC = fDataQA->GetMeanCharge()->GetCalROC(isec); + AliTPCCalROC* qmaxROC = fDataQA->GetMaxCharge()->GetCalROC(isec); + if (!occupancyROC) continue; + if (!nclusterROC) continue; + if (!qROC) continue; + if (!qmaxROC) continue; + + const UInt_t nchannels=occupancyROC->GetNchannels(); + + printf("Nchannels %d\n", nchannels); + + for (UInt_t ichannel=0;ichannelGetValue(ichannel); + ++normOcc[isec]; + + Float_t nClusters = nclusterROC->GetValue(ichannel); + normQ[isec] += nClusters; + vQaQtot[isec]+=nClusters*qROC->GetValue(ichannel); + vQaQmax[isec]+=nClusters*qmaxROC->GetValue(ichannel); + } + } + + //calculate mean values + for (UInt_t isec=0;isec0) vQaOcc[isec] /= normOcc[isec]; + else vQaOcc[isec] = 0; + + if (normQ[isec]>0) { + vQaQtot[isec] /= normQ[isec]; + vQaQmax[isec] /= normQ[isec]; + }else { + + vQaQtot[isec] = 0; + vQaQmax[isec] = 0; + } + } +} + //_____________________________________________________________________________________ void AliTPCcalibDButil::ProcessPulser(TVectorD &vMeanTime) { @@ -1140,8 +1224,8 @@ void AliTPCcalibDButil::UpdateRefDataFromOCDB() entry=GetRefEntry(cdbPath.Data()); if (entry){ entry->SetOwner(kTRUE); - fDataQA=dynamic_cast(entry->GetObject()); - if (!fDataQA){ + fRefDataQA=dynamic_cast(entry->GetObject()); + if (!fRefDataQA){ AliError(Form("Could not get object from entry '%s'\nPlease check!!!",entry->GetId().GetPath().Data())); } else { fRefDataQA=(AliTPCdataQA*)fDataQA->Clone(); diff --git a/TPC/AliTPCcalibDButil.h b/TPC/AliTPCcalibDButil.h index 135fe6bc6bc..0aba5324a6d 100644 --- a/TPC/AliTPCcalibDButil.h +++ b/TPC/AliTPCcalibDButil.h @@ -51,6 +51,7 @@ public: void ProcessNoiseData(TVectorD &vNoiseMean, TVectorD &vNoiseMeanSenRegions, TVectorD &vNoiseRMS, TVectorD &vNoiseRMSSenRegions, Int_t &nonMaskedZero, Int_t &nNaN); + void ProcessQAData(TVectorD &vQaOcc, TVectorD &vQaQtot, TVectorD &vQaQmax); void ProcessPulser(TVectorD &vMeanTime); void ProcessALTROConfig(Int_t &nMasked); void ProcessGoofie(TVectorD & vecEntries, TVectorD & vecMedian, TVectorD &vecMean, TVectorD &vecRMS); diff --git a/TPC/AliTPCcalibSummary.cxx b/TPC/AliTPCcalibSummary.cxx index dfa0d90525a..f8d12ea5023 100644 --- a/TPC/AliTPCcalibSummary.cxx +++ b/TPC/AliTPCcalibSummary.cxx @@ -229,6 +229,13 @@ void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){ Float_t bz=AliTPCcalibDB::GetBz(irun); Char_t l3pol=AliTPCcalibDB::GetL3Polarity(irun); // + //QA data processing + // + TVectorD vQaOcc; + TVectorD vQaQtot; + TVectorD vQaQmax; + fDButil->ProcessQAData(vQaOcc, vQaQtot, vQaQmax); + // //calibration Pulser data processing // Int_t nOffChannels=0; @@ -387,7 +394,11 @@ void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){ "rmsNoise.="<<&vNoiseRMS<< "rmsNoiseSen.="<<&vNoiseRMSSenRegions<< "zeroNoise="<