Класс AliFemtoESDTrackCutPlusJets определен следующим образом
class AliFemtoESDTrackCutPlusJets : public AliFemtoTrackCut
{
...
}
Наследование от класса AliFemtoTrackCut дает наследование от класса AliFemtoParticleCut, который, в свою очередь, наследуется от класса AliFemtoCutMonitorHandler.
Этот факт дает Вам право использовать метод AddCutMonitor для Вашего класса AliFemtoESDTrackCutPlusJets.
Именно таким образом Вы и должны добавлять Ваш собственный монитор – AliFemtoCutMonitorDphiDeta, через метод AddCutMonitor, который появляется автоматически у Вашего класса AliFemtoESDTrackCutPlusJets в силу механизма наследования.
То есть
// эти строчки нужны если у Вас не собран AliPhysics с Вашими классами (как у меня)
// gROOT->LoadMacro("AliFemtoCutMonitorDphiDeta.cxx+")
// gROOT->LoadMacro("AliFemtoESDTrackCutPlusJets.cxx+")
auto mon = new AliFemtoCutMonitorDphiDeta();
std::cout << mon->fPtmax << std::endl;
auto ct = new AliFemtoESDTrackCutPlusJets();
ct->AddCutMonitor(mon);
std::cout << ((AliFemtoCutMonitorDphiDeta*)ct->PassMonitor(0))->fPtmax << std::endl;
// 0
mon->fPtmax = 1234;
std::cout << ((AliFemtoCutMonitorDphiDeta*)ct->PassMonitor(0))->fPtmax << std::endl;
// 1234
Осталось вытащить данные монитора внутри класса AliFemtoESDTrackCutPlusJets. Это можно сделать точно также, с учетом того, что вместо конкретной переменной как в случае выше (ct) вам нужно использовать указатель this:
...
auto currentMonitor = ((AliFemtoCutMonitorDphiDeta*)this->PassMonitor(0));
double ptmax = 0;
double phimax = 0;
double etamax = 0;
if (currentMonitor)
{
ptmax = currentMonitor->fEtamax;
phimax = currentMonitor->fPhimax;
etamax = currentMonitor->fPtmax;
}
std::cout<<" fPtmax= "<<ptmax<<" fPhimax= "<<phimax<<" fEtamax= "<<etamax<<std::endl;
...
В файле ConfigFemtoAnalysis.C на забудьте поменять SetMonitor на AddCutMonitor и убрать разыменование:
dtc1etaphitpc[aniter]->SetNsigmaTPCTOF(true);
dtc1etaphitpc[aniter]->AddCutMonitor(cutPassDphiDeta[aniter]);
dtc1etaphitpc[aniter]->SetNsigma(3.0);