--- /dev/null
+#
+# Task configuration for use with AliAnalysisTaskCfg
+#
+# This sets up the forward ESD->AOD filtering task
+#
+#Module.Begin ForwardAOD
+#Module.Libs PWGLFforward2
+#Module.Deps PhysicsSelection, CentralitySelection, CopyHeader
+#Module.DataTypes ESD
+#Module.MacroName AddTaskForwardAOD
+# Not used when giving full macro
+#Module.MacroArgs false, 0, 0, 0
+#Module.OutputFile forward.root
+#Module.TerminateFile
+#Module.StartMacro
+AliAnalysisTask*
+AddTaskForwardAOD(Bool_t mc=false,
+ UShort_t sys=0,
+ UShort_t sNN=0,
+ Short_t field=0)
+{
+ // --- Get analysis manager ----------------------------------------
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ if (!mgr) {
+ std::cerr << "Failed to get manager");
+ Error("AddTaskForwardAOD", "No manager");
+ return 0;
+ }
+
+ // --- Make the task and add it to the manager ---------------------
+ AliForwardMultiplicityBase* task = 0;
+ if (mc) task = new AliForwardMCMultiplicityTask("FMD");
+ else task = new AliForwardMultiplicityTask("FMD");
+ Info("AddTaskForwardAOD", "Adding task");
+ Printf("Adding the task");
+ mgr->AddTask(task);
+
+ // --- Do a local initialisation with assumed values ---------------
+ if (sys > 0 && sNN > 0) {
+ UInt_t what = AliForwardCorrectionManager::kAll;
+ what ^= AliForwardCorrectionManager::kDoubleHit;
+ what ^= AliForwardCorrectionManager::kVertexBias;
+ what ^= AliForwardCorrectionManager::kMergingEfficiency;
+ if (!AliForwardCorrectionManager::Instance().Init(sys,sNN,field,mc,what))
+ Fatal("AddTaskForwardMult", "Failed to initialize corrections");
+ }
+
+ // --- Make the output container and connect it --------------------
+ TString outputfile = "forward.root"; // AliAnalysisManager::GetCommonFileName();
+ AliAnalysisDataContainer* histOut =
+ mgr->CreateContainer("Forward", TList::Class(),
+ AliAnalysisManager::kOutputContainer,outputfile);
+ mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(task, 1, histOut);
+
+ Info("AddTaskForwardAOD", "Returning task");
+ return task;
+}
+#Module.EndMacro
+#Module.StartConfig
+ // --- Cast to type ------------------------------------------------
+ AliForwardMultiplicityBase* task = static_cast<AliForwardMultiplicityBase*>(__R_ADDTASK__);
+ // --- General parameters ------------------------------------------
+ // Whether to enable low flux specific code
+ task->SetEnableLowFlux(kFALSE);
+
+ // Would like to use dynamic cast but CINT interprets that as a
+ // static cast - sigh!
+ Bool_t mc = false;
+ if (task->IsA() == AliForwardMCMultiplicityTask::Class())
+ mc = true;
+
+ Double_t nXi = mc ? 2 : 2; //HHD test
+ Bool_t includeSigma = false; //true;
+
+ AliFMDMultCuts cSharing;
+ cSharing.SetMultCuts(0.3, 0.3, 0.3, 0.3, 0.3);
+
+ AliFMDMultCuts cDensity;
+ cDensity.SetMultCuts(0.3, 0.3, 0.3, 0.3, 0.3);
+
+
+ // --- Event inspector ---------------------------------------------
+ // Set the number of SPD tracklets for which we consider the event a
+ // low flux event
+ task->GetEventInspector().SetLowFluxCut(1000);
+ // Set the maximum error on v_z [cm]
+ task->GetEventInspector().SetMaxVzErr(0.2);
+ // Least number of constributors to 2nd pile-up vertex
+ task->GetEventInspector().SetMinPileupContributors(3);
+ // Least distance from primary to 2nd pile-up vertex (cm)
+ task->GetEventInspector().SetMinPileupDistance(.8);
+ // V0-AND triggered events flagged as NSD
+ task->GetEventInspector().SetUseV0AndForNSD(true);
+ // Use primary vertex selection from 1st physics WG
+ // task->GetEventInspector().SetUseFirstPhysicsVtx(true);
+
+ // --- Sharing filter ----------------------------------------------
+ // Set the low cut used for sharing - overrides settings in eloss fits
+ // Float_t factor = 1.;
+ //if(mc) factor = 1.2;
+ //task->GetSharingFilter().SetLowCut(0.3*factor);
+ // Enable use of angle corrected signals in the algorithm
+ task->GetSharingFilter().SetUseAngleCorrectedSignals(true);
+ // Disable use of angle corrected signals in the algorithm
+ task->GetSharingFilter().SetZeroSharedHitsBelowThreshold(false);
+ // Whether to use simple merging algorithm
+ task->GetSharingFilter().SetUseSimpleSharing(false);
+ // Whether to allow for 3 strip hits
+ task->GetSharingFilter().SetAllow3Strips(true);
+ // Do not cut fixed/hard on multiplicity
+ task->GetSharingFilter().GetHCuts().SetMultCuts(-1);
+ // Set the number of xi's (width of landau peak) to stop at
+ task->GetSharingFilter().GetHCuts().SetNXi(nXi);
+ // Set whether or not to include sigma in cut
+ task->GetSharingFilter().GetHCuts().SetIncludeSigma(includeSigma);
+ // Enable use of angle corrected signals in the algorithm
+ task->GetSharingFilter().SetLCuts(cSharing);
+
+
+ // --- Density calculator ------------------------------------------
+ // Set the maximum number of particle to try to reconstruct
+ task->GetDensityCalculator().SetMaxParticles(10);
+ // Wet whether to use poisson statistics to estimate N_ch
+ task->GetDensityCalculator().SetUsePoisson(true);
+ // Set to use the running average in Poisson
+ // task->GetDensityCalculator().SetUseRunningAverage(false);
+ // Set whether or not to include sigma in cut
+ task->GetDensityCalculator().SetCuts(cDensity);
+ // Set lumping (nEta,nPhi)
+ task->GetDensityCalculator().SetLumping(32,4);
+ // Set whether or not to use the phi acceptance
+ // AliFMDDensityCalculator::kPhiNoCorrect
+ // AliFMDDensityCalculator::kPhiCorrectNch
+ // AliFMDDensityCalculator::kPhiCorrectELoss
+ task->GetDensityCalculator()
+ .SetUsePhiAcceptance(AliFMDDensityCalculator::kPhiCorrectNch);
+
+ // --- Corrector ---------------------------------------------------
+ // Whether to use the secondary map correction
+ task->GetCorrections().SetUseSecondaryMap(true);
+ // Whether to use the vertex bias correction
+ task->GetCorrections().SetUseVertexBias(false);
+ // Whether to use the vertex bias correction
+ task->GetCorrections().SetUseAcceptance(true);
+ // Whether to use the merging efficiency correction
+ task->GetCorrections().SetUseMergingEfficiency(false);
+
+ // --- Histogram Collector -----------------------------------------
+ // Set the number of extra bins (beyond the secondary map border)
+ task->GetHistCollector().SetNCutBins(2);
+ // Set the correction cut, that is, when bins in the secondary map
+ // is smaller than this, they are considered empty
+ task->GetHistCollector().SetCorrectionCut(0.5);
+ // How to calculate the value of overlapping bins.
+ // Possible values are
+ // kStraightMean
+ // kStraightMeanNoZero
+ // kWeightedMean
+ // kLeastError
+ task->GetHistCollector().SetMergeMethod(AliFMDHistCollector::kStraightMean);
+ // How to find the fiducial area of the secondary maps
+ // Possible values are
+ // kByCut Only bins larger that cut are trusted
+ // kDistance Only bins that are more than half the size of it neighbors
+ task->GetHistCollector().SetFiducialMethod(AliFMDHistCollector::kByCut);
+
+ // --- Debug -------------------------------------------------------
+ // Set the overall debug level (1: some output, 3: a lot of output)
+ // task->SetDebug(0);
+ // Set the debug level of a single algorithm
+ // task->GetSharingFilter().SetDebug(3);
+
+ // --- Eventplane Finder -------------------------------------------
+ task->GetEventPlaneFinder().SetUsePhiWeights(false);
+
+ // --- Set limits on fits the energy -------------------------------
+ // Maximum relative error on parameters
+ AliFMDCorrELossFit::ELossFit::fgMaxRelError = .12;
+ // Least weight to use
+ AliFMDCorrELossFit::ELossFit::fgLeastWeight = 1e-5;
+ // Maximum value of reduced chi^2
+ AliFMDCorrELossFit::ELossFit::fgMaxChi2nu = 20;
+#Module.EndConfig
+#
+# EOF
+#