AliTPCcalibDButil and Summary text:
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Sep 2010 11:20:39 +0000 (11:20 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 2 Sep 2010 11:20:39 +0000 (11:20 +0000)
Extract occupancy, Qmax, and Qtot per sector from QA OCDB entry.

Peter Christiansen

TPC/AliTPCcalibDButil.cxx
TPC/AliTPCcalibDButil.h
TPC/AliTPCcalibSummary.cxx

index 084c40c..0d5ba0c 100644 (file)
@@ -478,6 +478,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;isec<AliTPCCalPad::kNsec;++isec){
+
+    printf("Sector %d\n", isec);
+
+    AliTPCCalROC* occupancyROC = fDataQA->GetNoThreshold()->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;ichannel<nchannels;++ichannel){
+
+      vQaOcc[isec] += occupancyROC->GetValue(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;isec<AliTPCCalPad::kNsec;++isec){
+    
+    if (normOcc[isec]>0) 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<AliTPCdataQA*>(entry->GetObject());
-      if (!fDataQA){
+      fRefDataQA=dynamic_cast<AliTPCdataQA*>(entry->GetObject());
+      if (!fRefDataQA){
         AliError(Form("Could not get object from entry '%s'\nPlease check!!!",entry->GetId().GetPath().Data()));
       } else {
         fRefDataQA=(AliTPCdataQA*)fDataQA->Clone();
index 135fe6b..0aba532 100644 (file)
@@ -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);
index dfa0d90..f8d12ea 100644 (file)
@@ -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="<<nonMaskedZero<<
-      "nNaN="<<nNaN<<
+      "nNaN="<<nNaN<<  
+      //QA data
+      "occQA.="  << &vQaOcc  <<
+      "qQA.="    << &vQaQtot <<
+      "qmaxQA.=" << &vQaQmax <<
       //pulser data
       "timePulser.=" << &vTimePulser <<
       "nOffPulser="<<nOffChannels<<