ROOT logo
AlidNdPtTask *AddTaskdNdPt() 
{

	AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

	if (!mgr) {
		::Error("AddTaskdNdPt", "No analysis manager found.");
		return 0;
	}


	Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0);
	//  Bool_t hasMC= kFALSE;


	// Switch off all AliInfo (too much output!!!)
	//AliLog::SetGlobalLogLevel(AliLog::kError);
	//AliLog::SetGlobalDebugLevel(10);
	mgr->SetDebugLevel(0);

	//
	// Create physics trigger selection class
	//


	// AliPhysicsSelection *physTrigSel =  new AliPhysicsSelection();

	//
	// Create event cuts
	//
	Float_t zvWindow = 30. ;

	AlidNdPtEventCuts *evtCuts = new AlidNdPtEventCuts("AlidNdPtEventCuts","Event cuts");
	evtCuts->SetZvRange(-zvWindow,zvWindow);
	evtCuts->SetMeanXYZv(0.0,0.0,0.0);
	evtCuts->SetSigmaMeanXYZv(1.0,1.0,10.0);
	evtCuts->SetTriggerRequired(kTRUE);

	//
	// Create geom. acceptance cuts
	//
	Float_t etaWindow = 1. ;
	Float_t ptMin = 0.10 ;

	AlidNdPtAcceptanceCuts *accCuts = new AlidNdPtAcceptanceCuts("AlidNdPtAcceptanceCuts","Geom. acceptance cuts");
	accCuts->SetEtaRange(-etaWindow,etaWindow);
	accCuts->SetPtRange(ptMin,1.e10);

	// cut out trouble sector(s)
	Float_t phiMin = TMath::Pi() / 9. * 6.;
	Float_t phiMax = TMath::Pi() / 9. * 7.;
	// additional cut to remove one sector
	AlidNdPtAcceptanceCuts *recCuts = new AlidNdPtAcceptanceCuts("AlidNdPtRecAcceptanceCuts","Geom. acceptance cuts for Recostructed tracks");  
	recCuts->SetExcludeEtaPhiRange(-1.,0.,phiMin,phiMax);


	//
	// Create standard esd track cuts
	//
	Int_t cutMode = 200;

	gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/CreatedNdPtTrackCuts.C");  

	AliESDtrackCuts* esdTrackCuts = CreatedNdPtTrackCuts(cutMode);
	if (!esdTrackCuts) {
		printf("ERROR: esdTrackCuts could not be created\n");
		return;
	} else {
		esdTrackCuts->SetHistogramsOn(kTRUE);
		esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36.);
		esdTrackCuts->SetMaxChi2PerClusterITS(36.);    
	}

	//
	// Create task
	//
	AlidNdPtTask *task = new AlidNdPtTask("AlidNdPtTask");
	task->SetUseMCInfo(hasMC);

	// trigger selection: MB
	// task->SelectCollisionCandidates(AliVEvent::kMB);

	//
	// set analysis options from the Helper here
	//
	AlidNdPtHelper::OutputObject outputObject = AlidNdPtHelper::kAnalysisPbPb;
	AlidNdPtHelper::AnalysisMode analysisMode = AlidNdPtHelper::kTPCITS ;
	AlidNdPtHelper::ParticleMode particleMode = AlidNdPtHelper::kAllPart ;


	//
	// Create cut analysis object
	//
	if(outputObject==AlidNdPtHelper::kAnalysisPbPb){

		AlidNdPtAnalysisPbPb2011 *fdNdPtAnalysisPbPb = new AlidNdPtAnalysisPbPb2011("dNdPtAnalysisPbPb2011","dN/dPt Analysis");
		fdNdPtAnalysisPbPb->SetEventCuts(evtCuts);
		fdNdPtAnalysisPbPb->SetAcceptanceCuts(accCuts);    
		fdNdPtAnalysisPbPb->SetTrackCuts(esdTrackCuts);
		fdNdPtAnalysisPbPb->SetAnalysisMode(analysisMode); 
		fdNdPtAnalysisPbPb->SetParticleMode(particleMode); 
		fdNdPtAnalysisPbPb->SetCentralityEstimator("V0M");      
		//fdNdPtAnalysisPbPb->SetTriggerMask(AliVEvent::kCentral | AliVEvent::kMB | AliVEvent::kSemiCentral);
		fdNdPtAnalysisPbPb->SetTriggerMask(AliVEvent::kMB);
		//fdNdPtAnalysisPbPb->SetTriggerMask(AliVEvent::kEMC1);

		// cut to remove tpc sector
		//fdNdPtAnalysisPbPb->SetRecAcceptanceCuts(recCuts);

		// change binning
		Double_t centralitybins[12] = {0., 5., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.};  

		Double_t ptbins[85] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 180.0, 200.0, 300.0, 400.0, 500.0};
		Double_t ptcorrbins[85] = {0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 180.0, 200.0, 300.0, 400.0, 500.0};
		Double_t multbins[48] = {-0.5, 0.5 , 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5,9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5,19.5, 20.5, 30.5, 40.5 , 50.5 , 60.5 , 70.5 , 80.5 , 90.5 , 100.5,200.5, 300.5, 400.5, 500.5, 600.5, 700.5, 800.5, 900.5, 1000.5, 2000.5, 3000.5, 4000.5, 5000.5, 6000.5, 7000.5, 8000.5, 9000.5, 10000.5 };
		Double_t etabins[31] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};
		Double_t zvbins[13] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};


		//Double_t* binsPt = new Double_t[85];
		//for (int i=0; i<85; i++) {binsPt[i] = ptbins[i];}

		//fdNdPtAnalysisPbPb->SetBinsPt(85, ptbins);
		//fdNdPtAnalysisPbPb->SetBinsPtCorr(85, ptbins);  
		//fdNdPtAnalysisPbPb->SetBinsCentrality(4, centralitybins);

		if(ptbins)
		{
			Int_t nptbins = sizeof(ptbins) / sizeof(Double_t);
			Printf("Setting %i ptbins", nptbins);
			fdNdPtAnalysisPbPb->SetBinsPt(nptbins, ptbins);
		}

		if(ptbins)
		{
			Int_t nptcorrbins = sizeof(ptcorrbins) / sizeof(Double_t);
			Printf("Setting %i ptcorrbins", nptcorrbins);
			fdNdPtAnalysisPbPb->SetBinsPtCorr(nptcorrbins, ptcorrbins);
		}

		if(centralitybins)
		{
			Int_t ncentralitybins = sizeof(centralitybins) / sizeof(Double_t);
			Printf("Setting %i centralitybins", ncentralitybins);
			fdNdPtAnalysisPbPb->SetBinsCentrality(ncentralitybins, centralitybins);
		}

		if(hasMC) 
		{

			fdNdPtAnalysisPbPb->SetUseMCInfo(kTRUE);
			fdNdPtAnalysisPbPb->SetHistogramsOn(kTRUE);
		}
		else 
		{ 
			// online trigger
			// fdNdPtAnalysisPbPb->SetPhysicsTriggerSelection(physTrigSel); 
		}
		task->AddAnalysisObject( fdNdPtAnalysisPbPb );
	}

	// Add task
	mgr->AddTask(task);


	// Create containers for input
	AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();


	TString outputFileName = AliAnalysisManager::GetCommonFileName();

	AliAnalysisDataContainer *coutput  = mgr->CreateContainer("dNdPtPbPb", 
			TList::Class(),
			AliAnalysisManager::kOutputContainer, 	
			Form("%s:dNdPtHistos", mgr->GetCommonFileName()));

	mgr->ConnectInput(task, 0, cinput);
	mgr->ConnectOutput(task, 1, coutput);

	return task;

}

 AddTaskdNdPt.C:1
 AddTaskdNdPt.C:2
 AddTaskdNdPt.C:3
 AddTaskdNdPt.C:4
 AddTaskdNdPt.C:5
 AddTaskdNdPt.C:6
 AddTaskdNdPt.C:7
 AddTaskdNdPt.C:8
 AddTaskdNdPt.C:9
 AddTaskdNdPt.C:10
 AddTaskdNdPt.C:11
 AddTaskdNdPt.C:12
 AddTaskdNdPt.C:13
 AddTaskdNdPt.C:14
 AddTaskdNdPt.C:15
 AddTaskdNdPt.C:16
 AddTaskdNdPt.C:17
 AddTaskdNdPt.C:18
 AddTaskdNdPt.C:19
 AddTaskdNdPt.C:20
 AddTaskdNdPt.C:21
 AddTaskdNdPt.C:22
 AddTaskdNdPt.C:23
 AddTaskdNdPt.C:24
 AddTaskdNdPt.C:25
 AddTaskdNdPt.C:26
 AddTaskdNdPt.C:27
 AddTaskdNdPt.C:28
 AddTaskdNdPt.C:29
 AddTaskdNdPt.C:30
 AddTaskdNdPt.C:31
 AddTaskdNdPt.C:32
 AddTaskdNdPt.C:33
 AddTaskdNdPt.C:34
 AddTaskdNdPt.C:35
 AddTaskdNdPt.C:36
 AddTaskdNdPt.C:37
 AddTaskdNdPt.C:38
 AddTaskdNdPt.C:39
 AddTaskdNdPt.C:40
 AddTaskdNdPt.C:41
 AddTaskdNdPt.C:42
 AddTaskdNdPt.C:43
 AddTaskdNdPt.C:44
 AddTaskdNdPt.C:45
 AddTaskdNdPt.C:46
 AddTaskdNdPt.C:47
 AddTaskdNdPt.C:48
 AddTaskdNdPt.C:49
 AddTaskdNdPt.C:50
 AddTaskdNdPt.C:51
 AddTaskdNdPt.C:52
 AddTaskdNdPt.C:53
 AddTaskdNdPt.C:54
 AddTaskdNdPt.C:55
 AddTaskdNdPt.C:56
 AddTaskdNdPt.C:57
 AddTaskdNdPt.C:58
 AddTaskdNdPt.C:59
 AddTaskdNdPt.C:60
 AddTaskdNdPt.C:61
 AddTaskdNdPt.C:62
 AddTaskdNdPt.C:63
 AddTaskdNdPt.C:64
 AddTaskdNdPt.C:65
 AddTaskdNdPt.C:66
 AddTaskdNdPt.C:67
 AddTaskdNdPt.C:68
 AddTaskdNdPt.C:69
 AddTaskdNdPt.C:70
 AddTaskdNdPt.C:71
 AddTaskdNdPt.C:72
 AddTaskdNdPt.C:73
 AddTaskdNdPt.C:74
 AddTaskdNdPt.C:75
 AddTaskdNdPt.C:76
 AddTaskdNdPt.C:77
 AddTaskdNdPt.C:78
 AddTaskdNdPt.C:79
 AddTaskdNdPt.C:80
 AddTaskdNdPt.C:81
 AddTaskdNdPt.C:82
 AddTaskdNdPt.C:83
 AddTaskdNdPt.C:84
 AddTaskdNdPt.C:85
 AddTaskdNdPt.C:86
 AddTaskdNdPt.C:87
 AddTaskdNdPt.C:88
 AddTaskdNdPt.C:89
 AddTaskdNdPt.C:90
 AddTaskdNdPt.C:91
 AddTaskdNdPt.C:92
 AddTaskdNdPt.C:93
 AddTaskdNdPt.C:94
 AddTaskdNdPt.C:95
 AddTaskdNdPt.C:96
 AddTaskdNdPt.C:97
 AddTaskdNdPt.C:98
 AddTaskdNdPt.C:99
 AddTaskdNdPt.C:100
 AddTaskdNdPt.C:101
 AddTaskdNdPt.C:102
 AddTaskdNdPt.C:103
 AddTaskdNdPt.C:104
 AddTaskdNdPt.C:105
 AddTaskdNdPt.C:106
 AddTaskdNdPt.C:107
 AddTaskdNdPt.C:108
 AddTaskdNdPt.C:109
 AddTaskdNdPt.C:110
 AddTaskdNdPt.C:111
 AddTaskdNdPt.C:112
 AddTaskdNdPt.C:113
 AddTaskdNdPt.C:114
 AddTaskdNdPt.C:115
 AddTaskdNdPt.C:116
 AddTaskdNdPt.C:117
 AddTaskdNdPt.C:118
 AddTaskdNdPt.C:119
 AddTaskdNdPt.C:120
 AddTaskdNdPt.C:121
 AddTaskdNdPt.C:122
 AddTaskdNdPt.C:123
 AddTaskdNdPt.C:124
 AddTaskdNdPt.C:125
 AddTaskdNdPt.C:126
 AddTaskdNdPt.C:127
 AddTaskdNdPt.C:128
 AddTaskdNdPt.C:129
 AddTaskdNdPt.C:130
 AddTaskdNdPt.C:131
 AddTaskdNdPt.C:132
 AddTaskdNdPt.C:133
 AddTaskdNdPt.C:134
 AddTaskdNdPt.C:135
 AddTaskdNdPt.C:136
 AddTaskdNdPt.C:137
 AddTaskdNdPt.C:138
 AddTaskdNdPt.C:139
 AddTaskdNdPt.C:140
 AddTaskdNdPt.C:141
 AddTaskdNdPt.C:142
 AddTaskdNdPt.C:143
 AddTaskdNdPt.C:144
 AddTaskdNdPt.C:145
 AddTaskdNdPt.C:146
 AddTaskdNdPt.C:147
 AddTaskdNdPt.C:148
 AddTaskdNdPt.C:149
 AddTaskdNdPt.C:150
 AddTaskdNdPt.C:151
 AddTaskdNdPt.C:152
 AddTaskdNdPt.C:153
 AddTaskdNdPt.C:154
 AddTaskdNdPt.C:155
 AddTaskdNdPt.C:156
 AddTaskdNdPt.C:157
 AddTaskdNdPt.C:158
 AddTaskdNdPt.C:159
 AddTaskdNdPt.C:160
 AddTaskdNdPt.C:161
 AddTaskdNdPt.C:162
 AddTaskdNdPt.C:163
 AddTaskdNdPt.C:164
 AddTaskdNdPt.C:165
 AddTaskdNdPt.C:166
 AddTaskdNdPt.C:167
 AddTaskdNdPt.C:168
 AddTaskdNdPt.C:169
 AddTaskdNdPt.C:170
 AddTaskdNdPt.C:171
 AddTaskdNdPt.C:172
 AddTaskdNdPt.C:173
 AddTaskdNdPt.C:174
 AddTaskdNdPt.C:175
 AddTaskdNdPt.C:176
 AddTaskdNdPt.C:177
 AddTaskdNdPt.C:178
 AddTaskdNdPt.C:179
 AddTaskdNdPt.C:180
 AddTaskdNdPt.C:181
 AddTaskdNdPt.C:182
 AddTaskdNdPt.C:183
 AddTaskdNdPt.C:184