ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// Add task B2
// author: Eulogio Serradilla <eulogio.serradilla@cern.ch>

AliAnalysisTaskB2* AddTaskB2(  const TString& species
                             , const TString& containername
                             , const TString& trksel
                             , Int_t pidProc
                             , const TString& periodname
                             , Bool_t   simulation       = kFALSE
                             , Bool_t   heavyIons        = kFALSE
                             , Double_t maxDCAxy         = 1
                             , Double_t maxDCAz          = 2
                             , Double_t maxEta           = 0.8
                             , Double_t maxY             = 0.5
                             , Bool_t ntrkMultTrigger    = 0
                             , Double_t minKNOmult       = -10
                             , Double_t maxKNOmult       = 10000
                             , Bool_t   V0AND            = kFALSE
                             , const TString& ztag       = ""
                             , Double_t maxVz            = 10
                             , Bool_t momentumCorr       = kFALSE
                             , const TString& binSize    = ""
                             , Bool_t xRowsTPC           = 0
                             , Int_t minTPCnClsOrXRows   = 70
                             , Double_t minCentrality    = 0
                             , Double_t maxCentrality    = 20
                             , Double_t minM2            = 2.
                             , Double_t maxM2            = 6.)
{
//
// Create, configure and add the analysis task to the analysis manager
//
	using namespace std;
	
	// sample config
	
	const Double_t kMaxVx     = 1.;
	const Double_t kMaxVy     = 1.;
	
	const Double_t kMaxNSigma = 3.;
	
	const Int_t kMaxNSigmaITS = 3;
	const Int_t kMaxNSigmaTPC = 3;
	const Int_t kMaxNSigmaTOF = 3;
	
	TString period = periodname;
	period.ToLower();
	
	// Get pointer to the existing analysis manager
	
	AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
	if (!mgr)
	{
		cerr << "AddTaskB2: no analysis manager to connect to" << endl;
		return 0;
	}
	
	if (!mgr->GetInputEventHandler())
	{
		cerr << "AddTaskB2: this task requires an input event handler" << endl;
		return 0;
	}
	
	// Create and configure the task
	
	AliAnalysisTaskB2* task = new AliAnalysisTaskB2(Form("B2.%s",containername.Data()));
	
	task->SetParticleSpecies(species);
	task->SetSimulation(simulation);
	task->SetHeavyIons(heavyIons);
	task->SetV0ANDtrigger(V0AND);
	
	task->SetMaxNSigmaITS(kMaxNSigmaITS);
	task->SetMaxNSigmaTPC(kMaxNSigmaTPC);
	task->SetMaxNSigmaTOF(kMaxNSigmaTOF);
	
	task->SetNtrkMultTrigger(ntrkMultTrigger);
	
	gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/Nuclei/B2/macros/MeanNtrk.C");
	Double_t meanNtrk = MeanNtrk(period, maxEta, V0AND);
	
	task->SetMeanNtrk(meanNtrk);
	task->SetKNOmultInterval(minKNOmult, maxKNOmult);
	task->SetVertexXInterval(-kMaxVx, kMaxVx);
	task->SetVertexYInterval(-kMaxVy, kMaxVy);
	task->SetVertexZInterval(-maxVz, maxVz);
	
	task->SetEtaInterval(-maxEta, maxEta);
	task->SetRapidityInterval(-maxY, maxY);
	task->SetM2Interval(minM2, maxM2);
	
	task->SetCentralityInterval(minCentrality, maxCentrality);
	
	if(period=="lhc11a_wsdd" || period=="lhc11a_wosdd")
	{
		task->SetNoFastOnlyTrigger();
	}
	
	// momentum correction
	
	if(momentumCorr && species=="Deuteron")
	{
		gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/Nuclei/B2/macros/MomentumCorrection.C");
		
		TProfile* pfx = MomentumCorrection(species);
		task->SetMomentumCorrectionProfile(pfx);
		if(pfx != 0) task->SetMomentumCorrection();
	}
	
	// histograms
	
	gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/Nuclei/B2/macros/CreateHistograms.C");
	
	AliLnHistoMap* hMap = CreateHistograms(species, binSize, simulation, maxDCAxy, maxEta, maxY, heavyIons);
	
	task->SetHistogramMap(hMap);
	
	// track selection criteria
	
	gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/Nuclei/B2/macros/TrackCuts.C");
	
	AliESDtrackCuts* trkCuts = TrackCuts(task, trksel, maxDCAxy, maxDCAz, kMaxNSigma, xRowsTPC, minTPCnClsOrXRows, maxEta);
	task->SetESDtrackCuts(trkCuts);
	
	// PID
	
	gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/Nuclei/B2/macros/BetheBlochParams.C");
	
	Double_t bethe[5];
	BetheBlochParams(bethe, period);
	
	gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/Nuclei/B2/macros/PriorProbabilities.C");
	
	Double_t prob[9];
	PriorProbabilities(prob, period, trksel, ztag);
	
	AliLnID* lnID = new AliLnID();
	
	lnID->SetTPCBetheBlochParams(bethe);
	lnID->SetPriorProbabilities(prob);
	lnID->SetPidProcedure(pidProc);
	
	if(!simulation) lnID->SetTPCChargeCorrection(2.3);
	
	task->SetPID(lnID);
	
	// Add task to the manager
	
	mgr->AddTask(task);
	
	// input and output containers
	
	AliAnalysisDataContainer* output = mgr->CreateContainer(containername.Data(), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:AliAnalysisTaskB2", AliAnalysisManager::GetCommonFileName()));
	
	mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
	mgr->ConnectOutput(task, 1, output);
	
	return task;
}
 AddTaskB2.C:1
 AddTaskB2.C:2
 AddTaskB2.C:3
 AddTaskB2.C:4
 AddTaskB2.C:5
 AddTaskB2.C:6
 AddTaskB2.C:7
 AddTaskB2.C:8
 AddTaskB2.C:9
 AddTaskB2.C:10
 AddTaskB2.C:11
 AddTaskB2.C:12
 AddTaskB2.C:13
 AddTaskB2.C:14
 AddTaskB2.C:15
 AddTaskB2.C:16
 AddTaskB2.C:17
 AddTaskB2.C:18
 AddTaskB2.C:19
 AddTaskB2.C:20
 AddTaskB2.C:21
 AddTaskB2.C:22
 AddTaskB2.C:23
 AddTaskB2.C:24
 AddTaskB2.C:25
 AddTaskB2.C:26
 AddTaskB2.C:27
 AddTaskB2.C:28
 AddTaskB2.C:29
 AddTaskB2.C:30
 AddTaskB2.C:31
 AddTaskB2.C:32
 AddTaskB2.C:33
 AddTaskB2.C:34
 AddTaskB2.C:35
 AddTaskB2.C:36
 AddTaskB2.C:37
 AddTaskB2.C:38
 AddTaskB2.C:39
 AddTaskB2.C:40
 AddTaskB2.C:41
 AddTaskB2.C:42
 AddTaskB2.C:43
 AddTaskB2.C:44
 AddTaskB2.C:45
 AddTaskB2.C:46
 AddTaskB2.C:47
 AddTaskB2.C:48
 AddTaskB2.C:49
 AddTaskB2.C:50
 AddTaskB2.C:51
 AddTaskB2.C:52
 AddTaskB2.C:53
 AddTaskB2.C:54
 AddTaskB2.C:55
 AddTaskB2.C:56
 AddTaskB2.C:57
 AddTaskB2.C:58
 AddTaskB2.C:59
 AddTaskB2.C:60
 AddTaskB2.C:61
 AddTaskB2.C:62
 AddTaskB2.C:63
 AddTaskB2.C:64
 AddTaskB2.C:65
 AddTaskB2.C:66
 AddTaskB2.C:67
 AddTaskB2.C:68
 AddTaskB2.C:69
 AddTaskB2.C:70
 AddTaskB2.C:71
 AddTaskB2.C:72
 AddTaskB2.C:73
 AddTaskB2.C:74
 AddTaskB2.C:75
 AddTaskB2.C:76
 AddTaskB2.C:77
 AddTaskB2.C:78
 AddTaskB2.C:79
 AddTaskB2.C:80
 AddTaskB2.C:81
 AddTaskB2.C:82
 AddTaskB2.C:83
 AddTaskB2.C:84
 AddTaskB2.C:85
 AddTaskB2.C:86
 AddTaskB2.C:87
 AddTaskB2.C:88
 AddTaskB2.C:89
 AddTaskB2.C:90
 AddTaskB2.C:91
 AddTaskB2.C:92
 AddTaskB2.C:93
 AddTaskB2.C:94
 AddTaskB2.C:95
 AddTaskB2.C:96
 AddTaskB2.C:97
 AddTaskB2.C:98
 AddTaskB2.C:99
 AddTaskB2.C:100
 AddTaskB2.C:101
 AddTaskB2.C:102
 AddTaskB2.C:103
 AddTaskB2.C:104
 AddTaskB2.C:105
 AddTaskB2.C:106
 AddTaskB2.C:107
 AddTaskB2.C:108
 AddTaskB2.C:109
 AddTaskB2.C:110
 AddTaskB2.C:111
 AddTaskB2.C:112
 AddTaskB2.C:113
 AddTaskB2.C:114
 AddTaskB2.C:115
 AddTaskB2.C:116
 AddTaskB2.C:117
 AddTaskB2.C:118
 AddTaskB2.C:119
 AddTaskB2.C:120
 AddTaskB2.C:121
 AddTaskB2.C:122
 AddTaskB2.C:123
 AddTaskB2.C:124
 AddTaskB2.C:125
 AddTaskB2.C:126
 AddTaskB2.C:127
 AddTaskB2.C:128
 AddTaskB2.C:129
 AddTaskB2.C:130
 AddTaskB2.C:131
 AddTaskB2.C:132
 AddTaskB2.C:133
 AddTaskB2.C:134
 AddTaskB2.C:135
 AddTaskB2.C:136
 AddTaskB2.C:137
 AddTaskB2.C:138
 AddTaskB2.C:139
 AddTaskB2.C:140
 AddTaskB2.C:141
 AddTaskB2.C:142
 AddTaskB2.C:143
 AddTaskB2.C:144
 AddTaskB2.C:145
 AddTaskB2.C:146
 AddTaskB2.C:147
 AddTaskB2.C:148
 AddTaskB2.C:149
 AddTaskB2.C:150
 AddTaskB2.C:151
 AddTaskB2.C:152
 AddTaskB2.C:153
 AddTaskB2.C:154
 AddTaskB2.C:155
 AddTaskB2.C:156
 AddTaskB2.C:157
 AddTaskB2.C:158
 AddTaskB2.C:159
 AddTaskB2.C:160
 AddTaskB2.C:161
 AddTaskB2.C:162
 AddTaskB2.C:163
 AddTaskB2.C:164
 AddTaskB2.C:165
 AddTaskB2.C:166
 AddTaskB2.C:167
 AddTaskB2.C:168
 AddTaskB2.C:169
 AddTaskB2.C:170
 AddTaskB2.C:171
 AddTaskB2.C:172
 AddTaskB2.C:173
 AddTaskB2.C:174
 AddTaskB2.C:175