32 #include "FairRootManager.h"
33 #include "FairRunAna.h"
34 #include "FairRuntimeDb.h"
36 #include "FairRuntimeDb.h"
39 #include "TClonesArray.h"
43 #include "TDatabasePDG.h"
72 FairTask(
"PndSimpleCombinerTask"),
fVerbose(0), fEvtCount(0),
fRun(run), fMode(mode), fRunMult(10000),
73 fAnaDecay(anadecay), fAnaParms(anaparms), fNntp(0),
74 fPidAlgo(
"PidAlgoEmcBayes;PidAlgoDrc;PidAlgoDisc;PidAlgoStt;PidAlgoMdtHardCuts;PidAlgoSciT;PidAlgoRich;PidAlgoFtof"),
75 fQaMC(false), fQaEventShape(false), fQaRecoInfo(0), fQaEvShapeNtp(false), fFit4C(false),
76 fBest4C(false), fFitVtx(false), fFit4CChiCut(1e15), fFitVtxChiCut(1e8),
77 fAnalysis(0), fSimpleCombiner(0), fNodump(0), nmc(0), nevt(0)
79 fIni.SetXYZT(0,0,0,0);
81 if (p>0.0001)
fIni.SetXYZT(0,0,p,
sqrt(p*p+mp*mp)+mp);
101 for (
unsigned int i=0;
i<pars.size();++
i)
104 bool taskparm =
false;
107 if (pars[
i]==
"qamc") {
fQaMC =
true; taskparm =
true; }
108 if (pars[
i]==
"qaevtshape") {
fQaEventShape =
true; taskparm =
true; }
110 if (pars[
i]==
"qarec") {
fQaRecoInfo = 1 ; taskparm =
true; }
111 if (pars[
i]==
"qarecfull") {
fQaRecoInfo = 2 ; taskparm =
true; }
114 if (pars[
i].Contains(
"fit4c")) {
fFit4C =
true; taskparm =
true; }
115 if (pars[
i].Contains(
"fit4cbest")) {
fBest4C =
true; taskparm =
true; }
116 if (pars[
i].Contains(
"fitvtx")) {
fFitVtx =
true; taskparm =
true; }
118 if (pars[
i].BeginsWith(
"!ntp"))
120 int ntpnum = ((
TString)(pars[
i](4,100))).Atoi();
121 if (ntpnum>=0 && ntpnum<32)
fNodump |= (1<<ntpnum);
126 if (pars[
i].Contains(
"<"))
129 double cut =
TString((pars[
i])(pars[i].Index(
"<")+1,1000)).Atof();
130 if (cut<=0) { cout <<
"[PndSimpleCombinerTask] **** ERROR : Invalid parameter setting '"<<pars[
i]<<
"'"<<endl;
continue; }
138 if (taskparm)
fAnaParms.ReplaceAll(pars[
i],
"");
170 TDirectory *dir = gDirectory;
171 FairRootManager::Instance()->GetOutFile()->cd();
173 std::vector<TString> toks;
182 n =
new RhoTuple(TString::Format(
"ntp%d",
i), toks[
i]);
187 TString pname = toks[
i](0,toks[
i].Index(
"->"));
188 pname.ReplaceAll(
" ",
"");
189 if (TDatabasePDG::Instance()->GetParticle(pname)) {
vmpdg.push_back(TDatabasePDG::Instance()->GetParticle(pname)->PdgCode());}
204 fOnlineFilterInfo = ( TClonesArray* ) FairRootManager::Instance()->GetObject (
"OnlineFilterInfo" );
208 cout <<
"\n------------------------------------------"<<endl<<
"[PndSimpleCombinerTask] **** Configuration"<<endl<<
"------------------------------------------"<<endl;
214 cout <<
"Ntuple output : ";
215 if (
fQaMC) cout <<
"nmc ";
217 for (
int i=0;
i<
fNntp;++
i)
if (!(
fNodump & (1<<
i))) cout <<
"ntp"<<
i<<
"("<<TDatabasePDG::Instance()->GetParticle(
vmpdg[
i])->GetName()<<
") ";
218 cout <<
"\n------------------------------------------\n\n"<<endl;
244 TObjArray *tok = s.Tokenize(delim);
245 int N = tok->GetEntries();
247 for (
int i=0;
i<N;++
i)
249 TString st = ((TObjString*)tok->At(
i))->String();
250 st.ReplaceAll(
"\t",
"");
251 st = st.Strip(TString::kBoth);
252 if (st !=
"") toks.push_back(st);
286 double p = mclist[0]->P3().Pz();
287 double mp = 0.938272;
288 fIni.SetXYZT(0,0,p,
sqrt(p*p+mp*mp)+mp);
325 qa.qaEventShape(
"es", evsh,
nevt);
341 if (
fNodump & (1<<i))
continue;
345 if (TDatabasePDG::Instance()->GetParticle(pdg)->AntiParticle()) apdg = TDatabasePDG::Instance()->GetParticle(pdg)->AntiParticle()->PdgCode();
348 for (j=0; j<
fNntp; ++j)
if (
vmpdg[j]==apdg) {apdg=0; j=fNntp+1;}
361 double best4cChi2 = 1e10;
363 for (j=0;j<l1.GetLength();++j)
367 Float_t mmiss = (
fIni-(l1[j]->P4())).M();
368 Float_t msum = l1[j]->M() + mmiss;
372 bool fitaccept =
true;
381 double chi2_4c = fit4c.
GetChi2();
384 if (chi2_4c>best4cChi2 || !fitaccept)
continue;
386 best4cChi2 = chi2_4c;
390 vntp[
i]->Column(
"chi24c", (Float_t) chi2_4c);
391 qa.qaP4(
"f4cx", cfit->
P4(),
vntp[
i]);
396 qa.qaP4(TString::Format(
"f4cxd%d",k),d0fit->
P4(),
vntp[
i]);
401 qa.qaP4(TString::Format(
"f4cxd%dd%d",k,k2),ddfit->
P4(),
vntp[
i]);
407 vntp[
i]->Column(
"cand", (Int_t) j);
408 vntp[
i]->Column(
"ncand", (Int_t) l1.GetLength());
413 vntp[
i]->Column(
"mmiss", (Float_t) mmiss);
414 vntp[
i]->Column(
"msum", (Float_t) msum);
419 qa.qaComp(
"x", l1[j],
vntp[i]);
430 vntp[
i]->Column(
"trig", (Int_t) stInfo->
Tagged() );
437 if (truth) lv = truth->
P4();
438 qa.qaP4(
"trx", lv,
vntp[i]);
449 qa.qaVtx(
"fvxx",cfit,
vntp[i]);
450 qa.qaP4(
"fvxx", cfit->
P4(),
vntp[
i]);
451 double chi2_vtx = vtxfitter.
GetChi2();
452 vntp[
i]->Column(
"chi2vx", (Float_t) chi2_vtx);
457 if (fitaccept && ((i<fNntp-1) || !
fBest4C ))
vntp[
i]->DumpData();
460 if (
fBest4C && i==fNntp-1 && best4cChi2<1e10) {
vntp[
i]->DumpData();}
464 if (evsh)
delete evsh;
int SplitString(TString s, TString delim, std::vector< TString > &toks)
friend F32vec4 sqrt(const F32vec4 &a)
Bool_t FillList(RhoCandList &l, TString listkey="All", TString pidTcaNames="", int trackHypothesis=-1)
RhoCandidate * Daughter(Int_t n)
PndSimpleCombinerTask(TString anadecay, TString anaparms, double p=0, int run=0, int mode=0)
void Add4MomConstraint(TLorentzVector lv)
int CountChargedDaughters(RhoCandidate *c)
std::vector< TString > StringList
virtual InitStatus Init()
TLorentzVector P4() const
void Column(const char *label, Bool_t value, Bool_t defval=0, const char *block=0)
friend F32vec4 fabs(const F32vec4 &a)
TClonesArray * fOnlineFilterInfo
RhoCandidate * GetMcTruth() const
PndSimpleCombiner * fSimpleCombiner
RhoCandidate * GetFit() const
virtual void Exec(Option_t *opt)
TTree * GetInternalTree()
void SetVerbose(int verb=1)
bool GetList(RhoCandList &l, TString comp)
std::vector< RhoTuple * > vntp