--- /dev/null
+//
+// Macro designed for use with the AliAnalysisTaskDptDptCorrelations task.
+//
+// Author: Claude Pruneau, Wayne State
+//
+// system: 0: PbPb 1: pp
+// singlesOnly: 0: full correlations 1: singles only
+// useWeights: 0: no 1: yes
+// centralityMethod: 3: track count 4: V0 centrality
+//////////////////////////////////////////////////////////////////////////////
+AliAnalysisTask3PCorrelations * AddTask3PCorrelations(int etaOption = 0,
+ int system = 0,
+ int singlesOnly = 0,
+ int useWeights = 0,
+ int centralityMethod = 4)
+
+{
+ // Set Default Configuration of this analysis
+ // ==========================================
+ int debugLevel = 0;
+ int rejectPileup = 1;
+ int rejectPairConversion = 1;
+ int nCentrality;
+ double minCentrality[10];
+ double maxCentrality[10];
+
+ if (system==0) // PbPb
+ {
+ if (centralityMethod == 4)
+ {
+ nCentrality = 10;
+ minCentrality[0] = 0.5; maxCentrality[0] = 5.0;
+ minCentrality[1] = 5.0; maxCentrality[1] = 10.;
+ minCentrality[2] = 10.; maxCentrality[2] = 20.;
+ minCentrality[3] = 20.; maxCentrality[3] = 30.;
+ minCentrality[4] = 30.; maxCentrality[4] = 40.;
+ minCentrality[5] = 40.; maxCentrality[5] = 50.;
+ minCentrality[6] = 50.; maxCentrality[6] = 60.;
+ minCentrality[7] = 60.; maxCentrality[7] = 70.;
+ minCentrality[8] = 70.; maxCentrality[8] = 80.;
+ minCentrality[9] = 80.; maxCentrality[9] = 90.;
+
+ }
+ else
+ {
+ cout << "-F- AddTask3PCorrelations() system:" << system << ". centralityMethod:" << centralityMethod << " Option NOT AVAILABLE. ABORT."
+ return 0;
+ }
+ }
+ else if (system==1) // pp
+ {
+ if (centralityMethod == 3)
+ {
+ nCentrality = 4;
+ minCentrality[0] = 2; maxCentrality[0] = 100.0;
+ minCentrality[1] = 2; maxCentrality[1] = 20.;
+ minCentrality[2] = 20.; maxCentrality[2] = 50.;
+ minCentrality[3] = 50.; maxCentrality[3] = 100.;
+ }
+ else
+ {
+ cout << "-F- AddTask3PCorrelations() system:" << system << ". centralityMethod:" << centralityMethod << " Option NOT AVAILABLE. ABORT."
+ return 0;
+ }
+ }
+ else
+ {
+ cout << "-F- AddTask3PCorrelations() system:" << system << ". Option NOT CURRENTLY AVAILABLE. ABORT."
+ return 0;
+ }
+
+ double zMin = -10.;
+ double zMax = 10.;
+ double dcaZMin = -3.0;
+ double dcaZMax = 3.0;
+ double dcaXYMin = -3.0;
+ double dcaXYMax = 3.0;
+ double dedxMin = 0.0;
+ double dedxMax = 20000.0;
+ int nClusterMin = 70;
+ int trackFilterBit = 128;
+ double ptMin1 = 2.0;
+ double ptMax1 = 10.0;
+ double etaMin1 = -0.25;
+ double etaMax1 = 0.25;
+ double ptMin2 = 1.0;
+ double ptMax2 = 2.0;
+ double etaMin2 = -1.0;
+ double etaMax2 = -0.7;
+ double ptMin3 = 1.0;
+ double ptMax3 = 2.0;
+ double etaMin3 = 0.7;
+ double etaMax3 = 1.0;
+
+ if (etaOption == 0)
+ {
+ etaMin2 = -1.0;
+ etaMax2 = -0.7;
+ etaMin3 = 0.7;
+ etaMax3 = 1.0;
+ }
+ else
+ {
+ etaMin2 = etaMin1;
+ etaMax2 = etaMax1;
+ etaMin3 = etaMin1;
+ etaMax3 = etaMax1;
+
+ }
+
+ // Get the pointer to the existing analysis manager via the static access method.
+ // ==============================================================================
+ AliAnalysisManager *analysisManager = AliAnalysisManager::GetAnalysisManager();
+
+ if (!analysisManager)
+ {
+ ::Error("AddTask3PCorrelations", "No analysis manager to connect to.");
+ return NULL;
+ }
+
+ TString part1Name;
+ TString part2Name;
+ TString part3Name;
+ TString eventName;
+ TString prefixName = "Corr_";
+ TString pileupRejecSuffix = "_PileupRejec";
+ TString pairRejecSuffix = "_PairRejec";
+ TString calibSuffix = "_calib";
+ TString singlesOnlySuffix = "_SO";
+ TString suffix;
+
+ TString inputPath = ".";
+ TString outputPath = ".";
+ TString baseName;
+ TString listName;
+ TString taskName;
+ TString inputHistogramFileName;
+ TString outputHistogramFileName;
+
+ // Create the task and add subtask.
+ // ===========================================================================
+ int iTask = 0; // task counter
+ AliAnalysisDataContainer *taskInputContainer;
+ AliAnalysisDataContainer *taskOutputContainer;
+ AliAnalysisTask3PCorrelations * task;
+
+ for (int iCentrality=0; iCentrality < nCentrality; ++iCentrality)
+ {
+ part1Name = "";
+ part1Name += int(1000*ptMin1);
+ part1Name += "pt";
+ part1Name += int(1000*ptMax1);
+ part1Name += "_";
+
+ part2Name = "";
+ part2Name += int(1000*ptMin2);
+ part2Name += "pt";
+ part2Name += int(1000*ptMax2);
+ part2Name += "_";
+
+ part3Name = "";
+ part3Name += int(1000*ptMin3);
+ part3Name += "pt";
+ part3Name += int(1000*ptMax3);
+ part3Name += "_";
+
+ eventName = "";
+ eventName += int(10.*minCentrality[iCentrality] );
+ eventName += "Vo";
+ eventName += int(10.*maxCentrality[iCentrality] );
+ //if (rejectPileup) eventName += pileupRejecSuffix;
+ //if (rejectPairConversion) eventName += pairRejecSuffix;
+ baseName = prefixName;
+ baseName += part1Name;
+ baseName += part2Name;
+ baseName += part3Name;
+ baseName += eventName;
+ listName = baseName;
+ taskName = baseName;
+ inputHistogramFileName = "alien:///alice/cern.ch/user/c/cpruneau/PbPb273Calibration.root"; //TFile::Open();
+ outputHistogramFileName = baseName;
+ if (singlesOnly) outputHistogramFileName += singlesOnlySuffix;
+ outputHistogramFileName += ".root";
+
+ cout << "============================================================" << endl;
+ cout << " iTask: " << iTask << endl;
+ cout << " Task Name: " << taskName << endl;
+ cout << " List Name: " << listName << endl;
+ cout << " inputHistogramFileName: " << inputHistogramFileName << endl;
+ cout << " outputHistogramFileName: " << outputHistogramFileName << endl;
+ cout << " system: " << system << endl;
+ cout << " singlesOnly: " << singlesOnly << endl;
+ cout << " using weights: " << useWeights << endl;
+ cout << " centralityMethod: " << centralityMethod << endl;
+ cout << " debugLevel: " << debugLevel << endl;
+ cout << " rejectPileup: " << rejectPileup << endl;
+ cout << " rejectPairConversion: " << rejectPairConversion << endl;
+ cout << " zMin: " << zMin << endl;
+ cout << " zMax: " << zMax << endl;
+
+ cout << " ptMin1: " << ptMin1 << endl;
+ cout << " ptMax1: " << ptMax1 << endl;
+ cout << " etaMin1: " << etaMin1 << endl;
+ cout << " etaMax1: " << etaMax1 << endl;
+
+ cout << " ptMin2: " << ptMin2 << endl;
+ cout << " ptMax2: " << ptMax2 << endl;
+ cout << " etaMin2: " << etaMin2 << endl;
+ cout << " etaMax2: " << etaMax2 << endl;
+
+ cout << " ptMin3: " << ptMin3 << endl;
+ cout << " ptMax3: " << ptMax3 << endl;
+ cout << " etaMin3: " << etaMin3 << endl;
+ cout << " etaMax3: " << etaMax3 << endl;
+
+
+ cout << " dcaZMin: " << dcaZMin << endl;
+ cout << " dcaZMax: " << dcaZMax << endl;
+ cout << " dcaXYMin: " << dcaXYMin << endl;
+ cout << " dcaXYMax: " << dcaXYMax << endl;
+ cout << " dedxMin: " << dedxMin << endl;
+ cout << " dedxMax: " << dedxMax << endl;
+ cout << " nClusterMin: " << nClusterMin << endl;
+ cout << " trackFilterBit: " << trackFilterBit << endl;
+ cout << "============================================================" << endl;
+
+ TFile * inputFile = 0;
+ TList * histoList = 0;
+ TH3F * weight_1P = 0;
+ TH3F * weight_1M = 0;
+ TH3F * weight_2P = 0;
+ TH3F * weight_2M = 0;
+ TH3F * weight_3P = 0;
+ TH3F * weight_3M = 0;
+ TString nameHistoBase = "correction_";
+ TString nameHisto;
+ if (useWeights)
+ {
+ TGrid::Connect("alien:");
+ inputFile = TFile::Open(inputHistogramFileName,"OLD");
+ if (!inputFile)
+ {
+ cout << "Requested file:" << inputHistogramFileName << " was not opened. ABORT." << endl;
+ return;
+ }
+ nameHistoBase += eventName;
+ nameHisto = nameHistoBase + "_1p"; cout << "Input Histogram named: " << nameHisto << endl;
+ weight_1P = (TH3F *) inputFile->Get(nameHisto);
+ nameHisto = nameHistoBase + "_1m"; cout << "Input Histogram named: " << nameHisto << endl;
+ weight_1M = (TH3F *) inputFile->Get(nameHisto);
+ nameHisto = nameHistoBase + "_2p"; cout << "Input Histogram named: " << nameHisto << endl;
+ weight_2P = (TH3F *) inputFile->Get(nameHisto);
+ nameHisto = nameHistoBase + "_2m"; cout << "Input Histogram named: " << nameHisto << endl;
+ weight_2M = (TH3F *) inputFile->Get(nameHisto);
+ nameHisto = nameHistoBase + "_3p"; cout << "Input Histogram named: " << nameHisto << endl;
+ weight_3P = (TH3F *) inputFile->Get(nameHisto);
+ nameHisto = nameHistoBase + "_3m"; cout << "Input Histogram named: " << nameHisto << endl;
+ weight_3M = (TH3F *) inputFile->Get(nameHisto);
+
+ }
+ task = new AliAnalysisTask3PCorrelations(taskName);
+ //configure my task
+ task->SetDebugLevel( debugLevel );
+ task->SetSinglesOnly( singlesOnly );
+ task->SetUseWeights( useWeights );
+ task->SetRejectPileup( rejectPileup );
+ task->SetRejectPairConversion(rejectPairConversion);
+ task->SetVertexZMin( zMin );
+ task->SetVertexZMax( zMax );
+ task->SetVertexXYMin( -1. );
+ task->SetVertexXYMax( 1. );
+ task->SetCentralityMethod( centralityMethod);
+ task->SetCentrality( minCentrality[iCentrality], maxCentrality[iCentrality]);
+ task->SetPtMin1( ptMin1 );
+ task->SetPtMax1( ptMax1 );
+ task->SetEtaMin1( etaMin1 );
+ task->SetEtaMax1( etaMax1 );
+ task->SetPtMin2( ptMin2 );
+ task->SetPtMax2( ptMax2 );
+ task->SetEtaMin2( etaMin2 );
+ task->SetEtaMax2( etaMax2 );
+ task->SetPtMin3( ptMin3 );
+ task->SetPtMax3( ptMax3 );
+ task->SetEtaMin3( etaMin3 );
+ task->SetEtaMax3( etaMax3 );
+ task->SetDcaZMin( dcaZMin );
+ task->SetDcaZMax( dcaZMax );
+ task->SetDcaXYMin( dcaXYMin );
+ task->SetDcaXYMax( dcaXYMax );
+ task->SetDedxMin( dedxMin );
+ task->SetDedxMax( dedxMax );
+ task->SetNClusterMin( nClusterMin );
+ task->SetTrackFilterBit( trackFilterBit );
+ task->SetWeigth_1P( weight_1P );
+ task->SetWeigth_1M( weight_1M );
+ task->SetWeigth_2P( weight_2P );
+ task->SetWeigth_2M( weight_2M );
+ task->SetWeigth_3P( weight_3P );
+ task->SetWeigth_3M( weight_3M );
+
+
+
+ cout << "Creating task output container" << endl;
+ taskOutputContainer = analysisManager->CreateContainer(listName,
+ TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ Form("%s:Histos", AliAnalysisManager::GetCommonFileName()));
+ cout << "Add task to analysis manager and connect it to input and output containers" << endl;
+ analysisManager->AddTask(task);
+ analysisManager->ConnectInput( task, 0, analysisManager->GetCommonInputContainer());
+ analysisManager->ConnectOutput(task, 0, taskOutputContainer );
+ cout << "Task added ...." << endl;
+
+ iTask++;
+
+ }
+
+
+
+ return task;
+}