// 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
#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
, fESDfriend(0)\r
, fMC(0)\r
, fOutput(0)\r
+ , fOutputSummary(0)\r
, fPitList(0)\r
, fCompList(0)\r
, fUseMCInfo(kFALSE)\r
, fESDfriend(0)\r
, fMC(0)\r
, fOutput(0)\r
+ , fOutputSummary(0)\r
, fPitList(0)\r
, fCompList(0)\r
, fUseMCInfo(kFALSE)\r
\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
//_____________________________________________________________________________\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
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
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
// 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