# # 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(__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 #