--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Macro to setup AliPerformanceTask for
+// TPC performance QA to run on PWG1 QA train.
+//
+// Input: ESDs, ESDfriends (optional), Kinematics (optional), TrackRefs (optional)
+// ESD and MC input handlers must be attached to AliAnalysisManager
+// to run default configuration.
+//
+// By default 1 performance component is added to
+// the task:
+// 1. AliPerformancePtCalib
+// or AliPerformancePtCalibMC if bUseMCinfo = kTRUE (use MC info)
+
+// Usage on the analysis train (default configuration):
+// gSystem->Load("libANALYSIS");
+// gSystem->Load("libANALYSISalice");
+// gSystem->Load("libTPCcalib.so");
+// gSystem->Load("libPWG1.so");
+//
+// gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskPerformanceTPC.C");
+// AliPerformanceTask *tpcQA = AddTaskPerformanceTPC("kTRUE","kTRUE");
+//
+// Output:
+// TPC.Performance.root file with TPC performance components is created.
+//
+// Each of the components contains THnSparse generic histograms which
+// have to be analysed (post-analysis) by using Analyse() function.
+// Each component contains such function.
+//
+//13.10.2009 - J.Otwinowski@gsi.de
+///////////////////////////////////////////////////////////////////////////////
+
+//____________________________________________
+AliPerformanceTask* AddTaskPerformanceTPCPtCalib(Bool_t bUseMCInfo=kTRUE, Bool_t bUseESDfriend=kTRUE)
+{
+ //
+ // Add AliPerformanceTask with TPC performance components
+ //
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if(!mgr) {
+ Error("AddTaskPerformanceTPCPtCalib","AliAnalysisManager not set!");
+ return NULL;
+ }
+
+ TString type = mgr->GetInputEventHandler()->GetDataType();
+ if (!type.Contains("ESD")) {
+ Error("AddTaskPerformanceTPCPtCalib", "ESD input handler needed!");
+ return NULL;
+ }
+
+ AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
+ if (!mcH && bUseMCInfo) {
+ Error("AddTaskPerformanceTPCPtCalib", "MC input handler needed!");
+ return NULL;
+ }
+
+ //
+ // Create task
+ //
+ AliPerformanceTask *task = new AliPerformanceTask("Performance","TPC Performance PtCalib");
+ if (!task) {
+ Error("AddTaskPerformanceTPCPtCalib", "TPC performance task cannot be created!");
+ return NULL;
+ }
+ task->SetUseMCInfo(bUseMCInfo);
+ task->SetUseESDfriend(bUseESDfriend);
+
+ //
+ // Add task to analysis manager
+ //
+ mgr->AddTask(task);
+
+ //
+ // Create TPC-ESD track reconstruction cuts
+ //
+ AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts();
+ if(pRecInfoCuts) {
+ pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
+ pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
+ pRecInfoCuts->SetMinNClustersTPC(50);
+ pRecInfoCuts->SetMinNClustersITS(2);
+ pRecInfoCuts->SetHistogramsOn(kFALSE);
+ }
+ else {
+ Error("AddTaskPerformanceTPCPtCalib", "AliRecInfoCuts cannot be created!");
+ return NULL;
+ }
+ //
+ // Create TPC-MC track reconstruction cuts
+ //
+ AliMCInfoCuts *pMCInfoCuts = new AliMCInfoCuts();
+ if(pMCInfoCuts) {
+ pMCInfoCuts->SetMinTrackLength(70);
+ }
+ else {
+ Error("AddTaskPerformanceTPCPtCalib", "AliMCInfoCuts cannot be created!");
+ return NULL;
+ }
+
+ //
+ // Create performance objects for TPC and set cuts
+ //
+ enum { kTPC = 0, kTPCITS, kConstrained, kTPCInner, kTPCOuter, kTPCSec };
+
+
+ AliPerformancePtCalib *ptCalib = NULL;
+ AliPerformancePtCalibMC *ptCalibMC = NULL;
+
+ if(bUseMCInfo){
+ ptCalibMC = new AliPerformancePtCalibMC("AliPerformancePtCalibMC","AliPerformancePtCalibMC");//,kTPC,kTRUE);
+ if(!ptCalibMC) {
+ Error("AddTaskPerformanceTPCPtCalib", "Cannot create AliPerformancePtCalibMC");
+ }
+
+ ptCalibMC->SetAliRecInfoCuts(pRecInfoCuts);
+ ptCalibMC->SetReadTPCTracks(kTRUE);
+ ptCalibMC->SetTPCRefit(kFALSE) ;
+ ptCalibMC->SetITSRefit(kFALSE);
+ ptCalibMC->SetESDCuts(kTRUE);
+ ptCalibMC->SetDCACuts(kTRUE);
+ ptCalibMC->SetAcceptKinkDaughters(kFALSE);
+ ptCalibMC->SetRequireSigmaToVertex(kFALSE);
+ ptCalibMC->SetfDCAToVertex2D(kFALSE) ;
+
+ // const Double_t esdCutvalues[6] ={};//set esd track cut values
+ // ptCalibMC->SetESDcutValues(esdCutvalues);
+ // ptCalibMC->SetEtaRange(0.9);
+ // ptCalibMC->SetAliMCInfoCuts(pMCInfoCut);
+
+ }
+ else{
+
+ ptCalib = new AliPerformancePtCalib("AliPerformancePtCalib","AliPerformancePtCalib");//,kTPC,kFALSE);
+ if(!ptCalib) {
+ Error("AddTaskPerformanceTPCPtCalib", "Cannot create AliPerformancePtCalib");
+ }
+ ptCalib->SetAliRecInfoCuts(pRecInfoCuts);
+ ptCalib->SetReadTPCTracks(kTRUE);
+ ptCalib->SetTPCRefit(kFALSE) ;
+ ptCalib->SetITSRefit(kFALSE);
+ ptCalib->SetESDCuts(kTRUE);
+ ptCalib->SetDCACuts(kTRUE);
+ ptCalib->SetAcceptKinkDaughters(kFALSE);
+ ptCalib->SetRequireSigmaToVertex(kFALSE);
+ ptCalib->SetfDCAToVertex2D(kFALSE) ;
+
+ // const Double_t esdCutvalues[6] ={};
+ // ptCalib->SetESDcutValues(esdCutvalues);
+ // ptCalib->SetEtaRange(0.9);
+ // ptCalib->SetAliMCInfoCuts(pMCInfoCut);
+ }
+
+
+ // add components to the performance task
+
+ if(bUseMCInfo) task->AddPerformanceObject( ptCalibMC);
+ else task->AddPerformanceObject( ptCalib );
+
+ // Create containers for input
+ //
+ mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
+
+ //
+ // Create containers for output
+ //
+ AliAnalysisDataContainer *coutput_tpcptcalib = mgr->CreateContainer("TPCPtCalib", TList::Class(), AliAnalysisManager::kOutputContainer, Form("TPCPtCalib.%s.root", task->GetName()));
+ mgr->ConnectOutput(task, 0, coutput_tpcptcalib);
+
+return task;
+}