]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/TPC/AliPerformanceTask.cxx
FinishTaskOuptut and trending information implemented (M. Knichel)
[u/mrichter/AliRoot.git] / PWG1 / TPC / AliPerformanceTask.cxx
index 5e437ecbfbe9236ba646bf7e915ba82e63922471..bac3109a020876fa9734018b18bcd91e1f4311f7 100644 (file)
@@ -23,7 +23,7 @@
 // are stored in the output file (details in description of these classes).\r
 // \r
 // Author: J.Otwinowski 01/04/2009 \r
-// Changes by M.Knichel and H.Erdal 27/07/2010\r
+// Changes by M.Knichel 15/10/2010\r
 //------------------------------------------------------------------------------\r
 \r
 #include "iostream"\r
@@ -34,6 +34,7 @@
 #include "TCanvas.h"\r
 #include "TList.h"\r
 #include "TFile.h"\r
+#include "TSystem.h"\r
 \r
 #include "AliAnalysisTask.h"\r
 #include "AliAnalysisManager.h"\r
 #include "AliRecInfoCuts.h"\r
 #include "AliComparisonObject.h"\r
 #include "AliPerformanceObject.h"\r
+#include "AliTPCPerformanceSummary.h"\r
+#include "AliPerformanceTPC.h"\r
+#include "AliPerformanceDEdx.h"\r
 #include "AliPerformanceTask.h"\r
 \r
+\r
 using namespace std;\r
 \r
 ClassImp(AliPerformanceTask)\r
@@ -66,6 +71,7 @@ AliPerformanceTask::AliPerformanceTask()
   , fESDfriend(0)\r
   , fMC(0)\r
   , fOutput(0)\r
+  , fOutputSummary(0)\r
   , fPitList(0)\r
   , fCompList(0)\r
   , fUseMCInfo(kFALSE)\r
@@ -83,6 +89,7 @@ AliPerformanceTask::AliPerformanceTask(const char *name, const char */*title*/)
   , fESDfriend(0)\r
   , fMC(0)\r
   , fOutput(0)\r
+  , fOutputSummary(0)\r
   , fPitList(0)\r
   , fCompList(0)\r
   , fUseMCInfo(kFALSE)\r
@@ -93,6 +100,7 @@ AliPerformanceTask::AliPerformanceTask(const char *name, const char */*title*/)
 \r
   // Define input and output slots here\r
   DefineOutput(1, TList::Class());\r
+  DefineOutput(2, TTree::Class());\r
 \r
   // create the list for comparison objects\r
   fCompList = new TList;\r
@@ -101,8 +109,9 @@ AliPerformanceTask::AliPerformanceTask(const char *name, const char */*title*/)
 //_____________________________________________________________________________\r
 AliPerformanceTask::~AliPerformanceTask()\r
 {\r
-  if(fOutput)     delete fOutput;    fOutput   = 0; \r
-  if(fCompList)   delete fCompList;  fCompList = 0; \r
+  if (fOutput)     delete fOutput;    fOutput   = 0; \r
+  if (fOutputSummary) delete fOutputSummary; fOutputSummary = 0;\r
+  if (fCompList)   delete fCompList;  fCompList = 0; \r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -130,7 +139,10 @@ void AliPerformanceTask::UserCreateOutputObjects()
   fOutput = new TList;\r
   fOutput->SetOwner();\r
   fPitList = fOutput->MakeIterator();\r
-\r
+  \r
+  // create output list\r
+  //fOutputSummary = new TTree;\r
+  \r
   // add comparison objects to the output\r
   AliPerformanceObject *pObj=0;\r
   Int_t count=0;\r
@@ -140,7 +152,10 @@ void AliPerformanceTask::UserCreateOutputObjects()
     fOutput->Add(pObj);\r
     count++;\r
   }\r
-  Printf("CreateOutputObjects(): Number of output comparison objects: %d \n", count);\r
+  Printf("UserCreateOutputObjects(): Number of output comparison objects: %d \n", count);\r
+  \r
+  PostData(1, fOutput);  \r
+  //PostData(2, fOutputSummary);  \r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -212,19 +227,59 @@ void AliPerformanceTask::Terminate(Option_t *)
   // Called once at the end \r
   \r
   // check output data\r
-  fOutput = dynamic_cast<TList*> (GetOutputData(1));\r
-  if (!fOutput) {\r
-    Printf("ERROR: AliPerformanceTask::Terminate(): fOutput data not avaiable  ..." );\r
-    return;\r
-  }\r
+    fOutputSummary = dynamic_cast<TTree*> (GetOutputData(2));\r
+    fOutput = dynamic_cast<TList*> (GetOutputData(1));\r
+    if (!fOutput) {\r
+        Printf("ERROR: AliPerformanceTask::FinishTaskOutput(): fOutput data not available  ..." );\r
+        return;\r
+   }\r
+    if (fOutputSummary) { delete fOutputSummary; fOutputSummary=0; }      \r
+    AliPerformanceObject* pObj=0;\r
+    AliPerformanceTPC*  pTPC = 0;\r
+    AliPerformanceDEdx* pDEdx = 0;\r
+    TIterator* itOut = fOutput->MakeIterator();\r
+    itOut->Reset();\r
+    while(( pObj = dynamic_cast<AliPerformanceObject*>(itOut->Next())) != NULL) { \r
+        if (!  pTPC) {  pTPC = dynamic_cast<AliPerformanceTPC*>(pObj); }\r
+        if (! pDEdx) { pDEdx = dynamic_cast<AliPerformanceDEdx*>(pObj); }\r
+    }\r
+    TUUID uuid;\r
+    TString tmpFile = gSystem->TempDirectory() + TString("/TPCQASummary.") + uuid.AsString() + TString(".root");\r
+    AliTPCPerformanceSummary::WriteToFile(pTPC, pDEdx, tmpFile.Data());\r
+    TChain* chain = new TChain("tpcQA");\r
+    chain->Add(tmpFile.Data());\r
+    TTree *tree = chain->CopyTree("1");\r
+    if (chain) { delete chain; chain=0; }\r
+    fOutputSummary = tree;\r
+      \r
+     // Post output data.\r
+     PostData(2, fOutputSummary);\r
 \r
-  AliPerformanceObject* pObj=0;\r
-  TIterator* itOut = fOutput->MakeIterator();  \r
-  itOut->Reset();\r
-  while(( pObj = dynamic_cast<AliPerformanceObject*>(itOut->Next())) != NULL) {\r
-    pObj->Analyse();\r
-  }\r
+}\r
+\r
+//_____________________________________________________________________________\r
+void AliPerformanceTask::FinishTaskOutput()\r
+{\r
+    // called once at the end of each job (on the workernode)\r
+    //\r
+    // projects THnSparse to TH1,2,3\r
+    \r
+    fOutput = dynamic_cast<TList*> (GetOutputData(1));\r
+    if (!fOutput) {\r
+        Printf("ERROR: AliPerformanceTask::FinishTaskOutput(): fOutput data not available  ..." );\r
+        return;\r
+   }\r
 \r
+      AliPerformanceObject* pObj=0;\r
+      TIterator* itOut = fOutput->MakeIterator();  \r
+      itOut->Reset();\r
+      while(( pObj = dynamic_cast<AliPerformanceObject*>(itOut->Next())) != NULL) {\r
+          pObj->SetRunNumber(fCurrentRunNumber);\r
+          pObj->Analyse();\r
+      }\r
+      \r
+     // Post output data.\r
+     PostData(1, fOutput);\r
 }\r
 \r
 //_____________________________________________________________________________\r