Real operator()(Real a) const { boost::math::normal normal; Real d20 = boost::math::quantile(normal,-c0p_+a); Real d21 = boost::math::quantile(normal,-c1p_+a); Real alpha = (d20-d21)/(log(k0_)-log(k1_)); Real beta = d20-alpha*log(k0_); s_ = -1.0 / alpha; //f_ = std::min(exp(s_*(beta+s_/2.0)), QL_KAHALE_FMAX); // cap ? f_ = exp(s_*(beta+s_/2.0)); cFunction cTmp(f_,s_,a,0.0); b_ = c0_-cTmp(k0_); cFunction c(f_,s_,a,b_); return c(k1_)-c1_; }
Real operator()(Real a) const { boost::math::normal normal; Real d20 = boost::math::quantile(normal, -c0p_ + a); Real d21 = boost::math::quantile(normal, -c1p_ + a); Real alpha = (d20 - d21) / (std::log(k0_) - std::log(k1_)); Real beta = d20 - alpha * std::log(k0_); s_ = -1.0 / alpha; f_ = std::exp(s_ * (beta + s_ / 2.0)); QL_REQUIRE(f_ < QL_KAHALE_FMAX, "dummy"); // this is caught cFunction cTmp(f_, s_, a, 0.0); b_ = c0_ - cTmp(k0_); cFunction c(f_, s_, a, b_); return c(k1_) - c1_; }
void LightEffectSoundSolid::renderColor(Spectrum spectrum) { double bassFreq = getParameter("bass freq").getValue().getDouble(); double trebbleFreq = getParameter("trebble freq").getValue().getDouble(); double bassBoost = getParameter("bass boost").getValue().getDouble(); double trebbleBoost = getParameter("trebble boost").getValue().getDouble(); double fStart = getParameter("start frequency").getValue().getDouble(); double fEnd = getParameter("end frequency").getValue().getDouble(); double dbScaler = getParameter("db scaler").getValue().getDouble(); double dbFactor = getParameter("db factor").getValue().getDouble(); double avgFactor = getParameter("average factor").getValue().getDouble(); double changeFactor = getParameter("change factor").getValue().getDouble(); double noiseFloor = getParameter("noise floor").getValue().getDouble(); double avgFilterStrength = getParameter("average filter strength").getValue().getDouble(); uint8_t minSaturation = getParameter("min saturation").getValue().getDouble()*255; double filterStrength = getParameter("color filter strength").getValue().getDouble(); uint8_t threshold = getParameter("threshold").getValue().getDouble()*255; double r = 0., g = 0., b = 0.; size_t binCount = spectrum.getBinCount(); if(bassIndex == -1) { for(bassIndex = 0; (bassIndex < binCount) && (spectrum.getByIndex(bassIndex).getFreqCenter() <= bassFreq); ++bassIndex); std::cout << "Bass Index: " << bassIndex << std::endl; for(endIndex = 0; (endIndex < binCount) && (spectrum.getByIndex(endIndex).getFreqCenter() <= fEnd); ++endIndex); std::cout << "End Index: " << endIndex << std::endl; prevSpectrum = spectrum; } //Compute average double curAvg = 0; for(unsigned int i = 0; i < endIndex; ++i) { curAvg += spectrum.getByIndex(i).getEnergy(); } curAvg = 20.*std::log10(curAvg/endIndex) + noiseFloor; //double curAvg = spectrum.getAverageEnergyDB() + noiseFloor; if(curAvg < 0) curAvg = 0; avg = avg*avgFilterStrength + curAvg*(1. - avgFilterStrength); //Scale to be applied to each bin double scale = 1. / dbScaler; for(unsigned int i = 0; i < binCount; ++i) { FrequencyBin& bin = spectrum.getByIndex(i); double f = bin.getFreqCenter(); if(f > fEnd) break; if(f >= fStart) { //float hue = (f <= bassFreq) ? 40.f*std::pow((double)i/(bassIndex-1), 4.) //: (45.f + 240.f * (i-bassIndex) / (binCount - bassIndex - 1)); //float hue = 240. * i / (binCount - 1); int yellowPoint = 11; float hue; if(i < yellowPoint) { hue = 60. * i / (yellowPoint-1); } else { hue = 60. + 180.*(i-yellowPoint) / (binCount - yellowPoint - 1); } Color c = Color::HSV(255.f*hue/360.f, 255, 255); double db = bin.getEnergyDB(); FrequencyBin& prevBin = prevSpectrum.getByIndex(i); double change = db - prevBin.getEnergyDB(); if(change < 0) change = 0; //Bass boost if(f <= bassFreq) db += bassBoost; //Trebble boost if(f >= trebbleFreq) db += trebbleBoost; //Raise by noise floor, subtract loosly-tracking average db += noiseFloor - avg; //Reject anything below the average if(db < 0) continue; //Scale partially based on average level db *= dbFactor; db += avgFactor*avg + changeFactor*change; r += db * c.getRed(); g += db * c.getGreen(); b += db * c.getBlue(); } } //Scale color r *= scale; g *= scale; b *= scale; //Compute largest component double largest = std::max(r, std::max(g, b)); //Use the largest value to limit the maximum brightness to 255 if(largest > 255) { double scale = 255. / largest; r *= scale; g *= scale; b *= scale; } Color cTmp(r, g, b); uint8_t h = cTmp.getHue(), s = cTmp.getSat(), v = cTmp.getVal(); if(v < threshold) { v = 0; } //Enforce saturation minimum cTmp = Color::HSV(h, std::max(minSaturation, s), v); //Filter the color c.filter(cTmp, filterStrength); //Update previous spectrum prevSpectrum = spectrum; }
//______________________________________________________________________________ void AddAnalysisTasks(const char *cdb_location) { // Add all analysis task wagons to the train AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); // // Tender and supplies. Needs to be called for every event. // AliAnalysisManager::SetCommonFileName("AODQA.root"); if (useTender) { gROOT->LoadMacro("$ALICE_PHYSICS/ANALYSIS/TenderSupplies/AddTaskTender.C"); // IF V0 tender needed, put kTRUE below AliAnalysisTaskSE *tender = AddTaskTender(useV0tender); // tender->SetDebugLevel(2); } // Clean Geometry: Ruben // gROOT->LoadMacro("$ALICE_PHYSICS/PWGPP/CalibMacros/commonMacros/CleanGeom.C++"); // CleanGeom* clgmTask = new CleanGeom("cleanGeom"); // mgr->AddTask(clgmTask); // AliAnalysisDataContainer *dummyInp = mgr->GetCommonInputContainer(); // if (dummyInp) mgr->ConnectInput(clgmTask,0,dummyInp); // // PIDResponse(JENS) // if (doPIDResponse) { gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse(); // PIDResponse->SetUserDataRecoPass(1); // PIDResponse->SelectCollisionCandidates(AliVEvent::kAny); } // // PIDqa(JENS) // if (doPIDqa) { gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C"); AliAnalysisTaskPIDqa *PIDQA = AddTaskPIDqa(); PIDQA->SelectCollisionCandidates(AliVEvent::kAny); } // CDB connection // if (doCDBconnect && !useTender) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGPP/PilotTrain/AddTaskCDBconnect.C"); AliTaskCDBconnect *taskCDB = AddTaskCDBconnect(cdb_location, 0 /*run_number*/); if (!taskCDB) return; AliCDBManager *cdb = AliCDBManager::Instance(); cdb->SetDefaultStorage(cdb_location); // taskCDB->SetRunNumber(run_number); } if (usePhysicsSelection) { // Physics selection task gROOT->LoadMacro("$ALICE_PHYSICS/OADB/macros/AddTaskPhysicsSelection.C"); mgr->RegisterExtraFile("event_stat.root"); AliPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(useMC); mgr->AddStatisticsTask(AliVEvent::kAny); } //Jacek if (iPWGPP) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGPP/macros/AddTaskFilteredTree.C"); AddTaskFilteredTree("FilterEvents_Trees.root"); } // Centrality if (useCentrality) { if ( run_flag >= 1500 ) { gROOT->LoadMacro("$ALICE_PHYSICS/OADB/COMMON/MULTIPLICITY/macros/AddTaskMultSelection.C"); AliMultSelectionTask *taskMult = AddTaskMultSelection(); } else { // old scheme is only valid for PbPb if ( iCollision == kPbPb ) { gROOT->LoadMacro("$ALICE_PHYSICS/OADB/macros/AddTaskCentrality.C"); AliCentralitySelectionTask *taskCentrality = AddTaskCentrality(); //taskCentrality->SelectCollisionCandidates(AliVEvent::kAny); } } } // --- PWGLF - Forward ([email protected]) ----------------------------- if (iPWGLFForward && usePhysicsSelection) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGLF/FORWARD/analysis2/AddTaskForwardMult.C"); UShort_t pwglfForwardSys = 0; // iCollision+1; // pp:1, PbPb:2, pPb:3 UShort_t pwglfSNN = 0; // GeV, 0==unknown Short_t pwglfField = 0; AddTaskForwardMult(useMC && useTR, // Need track-refs pwglfForwardSys, // Collision system pwglfSNN, pwglfField); gROOT->LoadMacro("$ALICE_PHYSICS/PWGLF/FORWARD/analysis2/AddTaskCentralMult.C"); AddTaskCentralMult(useMC, pwglfForwardSys, pwglfSNN, pwglfField); } //PWGAgammaconv if (iPWGGAgammaconv) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGGA/GammaConv/macros/AddTask_ConversionAODProduction.C"); Int_t dataset=iCollision; if( iCollision == kXeXe) dataset=kPbPb; if( iCollision == kPbp || iCollision == kpPb ) dataset=2; AliAnalysisTask *taskconv = AddTask_ConversionAODProduction(dataset, kFALSE, periodName); mgr->RegisterExtraFile("AliAODGammaConversion.root"); } if (iESDfilter) { // ESD filter task configuration. gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/ESDfilter/macros/AddTaskESDFilter.C"); if (iMUONcopyAOD) { printf("Registering delta AOD file\n"); mgr->RegisterExtraFile("AliAOD.Muons.root"); } Bool_t muonWithSPDTracklets = (iCollision==kPbPb || iCollision==kXeXe) ? kFALSE : kTRUE; // add SPD information to muon AOD only for pp AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, iMUONcopyAOD, // write Muon AOD kFALSE, // write dimuon AOD kFALSE, // usePhysicsSelection kFALSE, // centrality OBSOLETE kTRUE, // enable TPS only tracks kFALSE, // disable cascades kFALSE, // disable kinks run_flag, // run flag (YY00) 3, // muonMCMode //kTRUE, // useV0Filter kFALSE, // useV0Filter - turned off for PCM to make sense muonWithSPDTracklets, isMuonCaloPass, iPWGGAgammaconv); // Add PCMV0 AliEMCALGeometry::GetInstance("",""); } // ********** PWG3 wagons ****************************************************** // PWGHF vertexing if (iPWGHFvertexing) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGHF/vertexingHF/macros/AddTaskVertexingHF.C"); Int_t configHF=0; if(iCollision == kPbPb || iCollision == kXeXe) configHF=1; AliAnalysisTaskSEVertexingHF *taskvertexingHF = AddTaskVertexingHF(configHF,train_name,"",run_number,periodName); // Now we need to keep in sync with the ESD filter if (!taskvertexingHF) ::Warning("AnalysisTrainNew", "AliAnalysisTaskSEVertexingHF cannot run for this train conditions - EXCLUDED"); else mgr->RegisterExtraFile("AliAOD.VertexingHF.root"); taskvertexingHF->SelectCollisionCandidates(0); } // PWGDQ JPSI filtering (only pp) if (iPWGDQJPSIfilter && (iCollision==kpp)) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGDQ/dielectron/macros/AddTaskJPSIFilter.C"); AliAnalysisTaskSE *taskJPSIfilter = AddTaskJPSIFilter(); if (!taskJPSIfilter) ::Warning("AnalysisTrainNew", "AliAnalysisTaskDielectronFilter cannot run for this train conditions - EXCLUDED"); else mgr->RegisterExtraFile("AliAOD.Dielectron.root"); taskJPSIfilter->SelectCollisionCandidates(0); } // PWGHF D2h if (iPWGHFd2h) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGHF/vertexingHF/AddD2HTrain.C"); AddD2HTrain(kFALSE, 1,0,0,0,0,0,0,0,0,0,0); } // ********** PWG4 wagons ****************************************************** // Jet analysis // Configurations flags, move up? TString kDeltaAODJetName = "AliAOD.Jets.root"; // Bool_t kIsPbPb = (iCollision==kPbPb || iCollision==kXeXe); TString kDefaultJetBackgroundBranch = ""; TString kJetSubtractBranches = ""; UInt_t kHighPtFilterMask = 272;// from esd filter UInt_t iPhysicsSelectionFlag = 0; if (iJETAN) { gROOT->LoadMacro("$ALICE_PHYSICS/PWGJE/macros/AddTaskJets.C"); // Default jet reconstructor running on ESD's AliAnalysisTaskJets *taskjets = AddTaskJets("AOD","UA1",0.4,kHighPtFilterMask,1.,0); // no background subtraction if (!taskjets) ::Fatal("AnalysisTrainNew", "AliAnalysisTaskJets cannot run for this train conditions - EXCLUDED"); if(kDeltaAODJetName.Length()>0) taskjets->SetNonStdOutputFile(kDeltaAODJetName.Data()); if (iJETANdelta) { // AddTaskJetsDelta("AliAOD.Jets.root"); // need to modify this accordingly in the add task jets mgr->RegisterExtraFile(kDeltaAODJetName.Data()); TString cTmp(""); if(kIsPbPb){ // UA1 intrinsic background subtraction taskjets = AddTaskJets("AOD","UA1",0.4,kHighPtFilterMask,1.,2); // background subtraction if(kDeltaAODJetName.Length()>0)taskjets->SetNonStdOutputFile(kDeltaAODJetName.Data()); } // SICONE taskjets = AddTaskJets("AOD","SISCONE",0.4,kHighPtFilterMask,0.15,0); //no background subtration to be done later.... if(kDeltaAODJetName.Length()>0)taskjets->SetNonStdOutputFile(kDeltaAODJetName.Data()); cTmp = taskjets->GetNonStdBranch(); if(cTmp.Length()>0)kJetSubtractBranches += Form("%s ",cTmp.Data()); // Add the clusters.. gROOT->LoadMacro("$ALICE_PHYSICS/PWGJE/macros/AddTaskJetCluster.C"); AliAnalysisTaskJetCluster *taskCl = 0; Float_t fCenUp = 0; Float_t fCenLo = 0; Float_t fTrackEtaWindow = 0.9; taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,0); // this one is for the background and random jets, random cones with no skip taskCl->SetBackgroundCalc(kTRUE); taskCl->SetNRandomCones(10); taskCl->SetCentralityCut(fCenLo,fCenUp); taskCl->SetGhostEtamax(fTrackEtaWindow); kDefaultJetBackgroundBranch = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),0.15); taskCl->SetCentralityCut(fCenLo,fCenUp); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); taskCl->SetNRandomCones(10); kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch()); taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.2,0,1,kDeltaAODJetName.Data(),0.15); taskCl->SetCentralityCut(fCenLo,fCenUp); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch()); // DO THE BACKGROUND SUBTRACTION if(kIsPbPb&&kJetSubtractBranches.Length()){ gROOT->LoadMacro("$ALICE_PHYSICS/PWGJE/macros/AddTaskJetBackgroundSubtract.C"); AliAnalysisTaskJetBackgroundSubtract *taskSubtract = 0; taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,1,"B0","B%d"); taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data()); } } } }
//______________________________________________________________________________ void AddAnalysisTasks(){ // Add all analysis task wagons to the train IlcAnalysisManager *mgr = IlcAnalysisManager::GetAnalysisManager(); // // Tender and supplies. Needs to be called for every event. // IlcAnalysisManager::SetCommonFileName("AODQA.root"); if (useTender) { gROOT->LoadMacro("$ILC_ROOT/ANALYSIS/TenderSupplies/AddTaskTender.C"); // IF V0 tender needed, put kTRUE below IlcAnalysisTaskSE *tender = AddTaskTender(useV0tender); // tender->SetDebugLevel(2); } if (usePhysicsSelection) { // Physics selection task gROOT->LoadMacro("$ILC_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); mgr->RegisterExtraFile("event_stat.root"); IlcPhysicsSelectionTask *physSelTask = AddTaskPhysicsSelection(useMC); // IlcOADBPhysicsSelection * oadbDefaultPbPb = CreateOADBphysicsSelection(); // physSelTask->GetPhysicsSelection()->SetCustomOADBObjects(oadbDefaultPbPb,0,0); mgr->AddStatisticsTask(IlcVEvent::kAny); } // Centrality (only Pb-Pb) if (iCollision && useCentrality) { gROOT->LoadMacro("$ILC_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); IlcCentralitySelectionTask *taskCentrality = AddTaskCentrality(); taskCentrality->SelectCollisionCandidates(IlcVEvent::kAny); } if (iESDfilter) { // ESD filter task configuration. gROOT->LoadMacro("$ILC_ROOT/ANALYSIS/macros/AddTaskESDFilter.C"); if (iMUONcopyAOD) { printf("Registering delta AOD file\n"); mgr->RegisterExtraFile("IlcAOD.Muons.root"); mgr->RegisterExtraFile("IlcAOD.Dimuons.root"); IlcAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,IlcESDpid::kTOF_T0,kTRUE,kFALSE,kFALSE,run_flag); } else { IlcAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE, kFALSE, kFALSE /*usePhysicsSelection*/,kFALSE,IlcESDpid::kTOF_T0,kTRUE,kFALSE,kFALSE,run_flag); // others } } // ********** PWG3 wagons ****************************************************** // PWGHF vertexing if (iPWGHFvertexing) { gROOT->LoadMacro("$ILC_ROOT/PWGHF/vertexingHF/macros/AddTaskVertexingHF.C"); if (!iPWGHFd2h) TFile::Cp(gSystem->ExpandPathName(configPWGHFd2h.Data()), "file:ConfigVertexingHF.C"); IlcAnalysisTaskSEVertexingHF *taskvertexingHF = AddTaskVertexingHF(); if (!taskvertexingHF) ::Warning("AnalysisTrainNew", "IlcAnalysisTaskSEVertexingHF cannot run for this train conditions - EXCLUDED"); else mgr->RegisterExtraFile("IlcAOD.VertexingHF.root"); taskvertexingHF->SelectCollisionCandidates(0); } // PWGDQ JPSI filtering (only pp) if (iPWGDQJPSIfilter && (iCollision==0)) { gROOT->LoadMacro("$ILC_ROOT/PWGDQ/dielectron/macros/AddTaskJPSIFilter.C"); IlcAnalysisTaskSE *taskJPSIfilter = AddTaskJPSIFilter(); if (!taskJPSIfilter) ::Warning("AnalysisTrainNew", "IlcAnalysisTaskDielectronFilter cannot run for this train conditions - EXCLUDED"); else mgr->RegisterExtraFile("IlcAOD.Dielectron.root"); taskJPSIfilter->SelectCollisionCandidates(0); } // PWGHF D2h if (iPWGHFd2h) { gROOT->LoadMacro("$ILC_ROOT/PWGHF/vertexingHF/AddD2HTrain.C"); TFile::Cp(gSystem->ExpandPathName(configPWGHFd2h.Data()), "file:ConfigVertexingHF.C"); AddD2HTrain(kFALSE, 1,0,0,0,0,0,0,0,0,0,0); } // ********** PWG4 wagons ****************************************************** // Jet analysis // Configurations flags, move up? TString kDeltaAODJetName = "IlcAOD.Jets.root"; // Bool_t kIsPbPb = (iCollision==0)?false:true; // can be more intlligent checking the name of the data set TString kDefaultJetBackgroundBranch = ""; TString kJetSubtractBranches = ""; UInt_t kHighPtFilterMask = 128;// from esd filter UInt_t iPhysicsSelectionFlag = IlcVEvent::kMB; if (iJETAN) { gROOT->LoadMacro("$ILC_ROOT/PWGJE/macros/AddTaskJets.C"); // Default jet reconstructor running on ESD's IlcAnalysisTaskJets *taskjets = AddTaskJets("AOD","UA1",0.4,kHighPtFilterMask,1.,0); // no background subtraction if (!taskjets) ::Fatal("AnalysisTrainNew", "IlcAnalysisTaskJets cannot run for this train conditions - EXCLUDED"); if(kDeltaAODJetName.Length()>0) taskjets->SetNonStdOutputFile(kDeltaAODJetName.Data()); if (iJETANdelta) { // AddTaskJetsDelta("IlcAOD.Jets.root"); // need to modify this accordingly in the add task jets mgr->RegisterExtraFile(kDeltaAODJetName.Data()); TString cTmp(""); if(kIsPbPb){ // UA1 intrinsic background subtraction taskjets = AddTaskJets("AOD","UA1",0.4,kHighPtFilterMask,1.,2); // background subtraction if(kDeltaAODJetName.Length()>0)taskjets->SetNonStdOutputFile(kDeltaAODJetName.Data()); } // SICONE taskjets = AddTaskJets("AOD","SISCONE",0.4,kHighPtFilterMask,0.15,0); //no background subtration to be done later.... if(kDeltaAODJetName.Length()>0)taskjets->SetNonStdOutputFile(kDeltaAODJetName.Data()); cTmp = taskjets->GetNonStdBranch(); if(cTmp.Length()>0)kJetSubtractBranches += Form("%s ",cTmp.Data()); // Add the clusters.. gROOT->LoadMacro("$ILC_ROOT/PWGJE/macros/AddTaskJetCluster.C"); IlcAnalysisTaskJetCluster *taskCl = 0; Float_t fCenUp = 0; Float_t fCenLo = 0; Float_t fTrackEtaWindow = 0.9; taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,0); // this one is for the background and random jets, random cones with no skip taskCl->SetBackgroundCalc(kTRUE); taskCl->SetNRandomCones(10); taskCl->SetCentralityCut(fCenLo,fCenUp); taskCl->SetGhostEtamax(fTrackEtaWindow); kDefaultJetBackgroundBranch = Form("%s_%s",IlcAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),0.15); taskCl->SetCentralityCut(fCenLo,fCenUp); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); taskCl->SetNRandomCones(10); kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch()); taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.2,0,1,kDeltaAODJetName.Data(),0.15); taskCl->SetCentralityCut(fCenLo,fCenUp); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch()); // DO THE BACKGROUND SUBTRACTION if(kIsPbPb&&kJetSubtractBranches.Length()){ gROOT->LoadMacro("$ILC_ROOT/PWGJE/macros/AddTaskJetBackgroundSubtract.C"); IlcAnalysisTaskJetBackgroundSubtract *taskSubtract = 0; taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,1,"B0","B%d"); taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data()); } } } }