using namespace std;
#include "TObject.h"
#include "TRandom.h"
#include <time.h>
#include <iostream>
#include <iomanip>
#include <math.h>
#include "TMath.h"
#include "TDatime.h"
#include "hdihitmatchsim.h"
#include "hhitmatchsim.h"
#include "phyanadef.h"
#include "hrichcutpairsim.h"
#include "hrichcuto.h"
#include "hkicktrack.h"
#include "kickdef.h"
#include "hlinearcategory.h"
#include "hrichutilfunc.h"
#include "richdef.h"
#include "htrackinfo.h"
#include "hparticle.h"
#include "hrichhit.h"
#include "hades.h"
#include "hiterator.h"
#include "hcategory.h"
#include "hphysicsconstants.h"
#include "hrecevent.h"
#include "hlocation.h"
HRichCutPairSim::HRichCutPairSim() : HRichCutPair()
{
}
HRichCutPairSim::HRichCutPairSim(const Text_t *name,const Text_t *title)
: HRichCutPair(name, title)
{
isExp=kFALSE;
isSim=kFALSE;
setStandardCuts();
TDatime dt;
dt.Set();
TString stitle(title);
stitle.Append("_");
stitle+=dt.GetDate();
stitle.Append("_");
stitle+=dt.GetTime();
SetTitle(stitle.Data());
}
Bool_t HRichCutPairSim::switchTo(const Char_t *s,Bool_t clear)
{
TString state(s);
Bool_t ret_val = kFALSE;
if (clear) reset();
if (state.Contains("."))
{
listCut=kTRUE;
Int_t len = state.Length();
TString tmp; tmp="";
for (Int_t i=0;i<len;i++)
{
TString st(state[i]);
if (!st.CompareTo("."))
{
tmp.Remove(0,1);
if (!(ret_val = switchTo(tmp.Data(),kFALSE))) return ret_val;
tmp="";
}
else
{
tmp.Append(st);
}
if (i==len-1)
{
tmp.Remove(0,1);
if (!(ret_val = switchTo(tmp.Data(),kFALSE))) return ret_val;
}
}
return ret_val;
}
if (!state.CompareTo("isConvPair"))
{
kisConvPair = 1;
isSim= kTRUE;
ret_val = kTRUE;
}
else if (!state.CompareTo("isFakePair"))
{
kisFakePair = 1;
ret_val = kTRUE;
isSim= kTRUE;
}
else if (!state.CompareTo("isPhysCBPair"))
{
kisPhysCBPair = 1;
ret_val = kTRUE;
isSim= kTRUE;
}
else if (!state.CompareTo("isDalitzPair"))
{
kisDalitzPair = 1;
ret_val = kTRUE;
isSim= kTRUE;
}
else if (!state.CompareTo("isEtaDalitzPair"))
{
kisEtaDalitzPair = 1;
ret_val = kTRUE;
isSim= kTRUE;
}
else if (!state.CompareTo("isAllCombiPair"))
{
kisAllCombiPair = 1;
ret_val = kTRUE;
isSim= kTRUE;
}
else if (!state.CompareTo("isLepCombiPair"))
{
kisLepCombiPair = 1;
ret_val = kTRUE;
isSim= kTRUE;
}
else if (!state.CompareTo("nocutpairsim"))
{
isSim= kFALSE;
ret_val = kTRUE;
}
else
{
isExp = HRichCutPair::switchTo(s,clear);
if (!isExp)
{
}
ret_val = isExp;
}
return ret_val;
}
void HRichCutPairSim::setStandardCuts()
{
reset();
kisFakePair = 0;
kisConvPair = 0;
kisPhysCBPair = 0;
kisDalitzPair = 0;
kisAllCombiPair = 0;
kisLepCombiPair = 0;
kisEtaDalitzPair=0;
}
void HRichCutPairSim::reset()
{
HRichCutPair::reset();
kisFakePair = 0;
kisConvPair = 0;
kisPhysCBPair = 0;
kisDalitzPair = 0;
kisAllCombiPair = 0;
kisLepCombiPair = 0;
kisEtaDalitzPair = 0;
}
void HRichCutPairSim::printCutList(const Char_t* s)
{
if (s) switchTo(s);
else {setStandardCuts(); HRichCutPair::setStandardCuts();}
if (!isExp)
{
printf("\n-----------------------------------------------\n");
printf(" HRichCutPairSim cuts \n");
printf(" ------------------------ \n");
if (kisDalitzPair) printf("cut on pi0-Dalitz lepton pair active \n");
if (kisAllCombiPair) printf("cut on combinatorial pair active \n");
if (kisLepCombiPair) printf("cut on combinatorial lepton pair active \n");
if (kisConvPair) printf("cut on pair conversion lepton pair (from pi0) active\n");
if (kisFakePair) printf("cut on pair fake lepton pair (from pi0) active\n");
if (kisPhysCBPair) printf("cut on pair physCB lepton pair (from pi0) active\n");
printf("-------------------------------------------------\n\n");
}
else HRichCutPair::printCutList(s);
return;
}
void HRichCutPairSim::printCutList()
{
printf("\n-----------------------------------------------\n");
printf(" HRichCutPairSim cuts \n");
printf(" ------------------------ \n");
if (kisDalitzPair) printf("cut on pi0-Dalitz lepton pair active \n");
if (kisAllCombiPair) printf("cut on combinatorial pair active \n");
if (kisLepCombiPair) printf("cut on combinatorial lepton pair active \n");
if (kisConvPair) printf("cut on pair conversion lepton pair (from pi0) active\n");
if (kisFakePair) printf("cut on pair fake lepton pair (from pi0) active\n");
if (kisPhysCBPair) printf("cut on pair phys cb lepton pair (from pi0) active\n");
printf("-------------------------------------------------\n\n");
HRichCutPair::printCutList();
}
Bool_t HRichCutPairSim::check(HDiHitMatchSim* h)
{
Bool_t ret_val=kFALSE;
if (!listCut)
{
if ( !isExp ){
if (
(!kisDalitzPair || isDalitzPair(h) ) &&
(!kisFakePair || isFakePair(h) ) &&
(!kisPhysCBPair || isPhysCBPair(h) ) &&
(!kisEtaDalitzPair || isEtaDalitzPair(h) ) &&
(!kisAllCombiPair || isAllCombiPair(h) ) &&
(!kisLepCombiPair || isLepCombiPair(h) ) &&
(!kisConvPair || isConvPair(h) )
) ret_val=kTRUE;
}
else if (isExp) ret_val=HRichCutPair::check(h);
}
else
{
if (isExp && isSim)
{
if (
(!kisDalitzPair || isDalitzPair(h) ) &&
(!kisFakePair || isFakePair(h) ) &&
(!kisPhysCBPair || isPhysCBPair(h) ) &&
(!kisEtaDalitzPair || isEtaDalitzPair(h) ) &&
(!kisAllCombiPair || isAllCombiPair(h) ) &&
(!kisLepCombiPair || isLepCombiPair(h) ) &&
(!kisConvPair || isConvPair(h) )
) ret_val=kTRUE;
Bool_t ret_val_exp = HRichCutPair::check(h);
if (ret_val && ret_val_exp) ret_val = kTRUE;
}
else {listCut=kFALSE;ret_val = check(h);}
}
return ret_val;
}
Bool_t HRichCutPairSim::isConvPair(HDiHitMatchSim* h)
{
Bool_t ret_val=kFALSE;
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isConvPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isConvPair","HHitMatchSim object 2 not found");
}
else Error("isConvPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
for (Int_t i=0;i<MAXPARTICLES;i++)
{
if (tt1->getConvLep(i)==1)
{
Int_t c1 = tt1->calcCorrCode(i);
for (Int_t j=0;j<MAXPARTICLES;j++)
{
Int_t c2 = tt2->calcCorrCode(j);
if (
c1==4 && c2==4 &&
tt2->getConvLep(j)==1 &&
tt2->getParId(j)+tt1->getParId(i)==5 &&
tt1->getCreaTrkNb(i)!=-1 &&
tt2->getCreaTrkNb(j)!=-1 &&
tt1->getCreaTrkNb(i)==tt2->getCreaTrkNb(j) &&
tt1->getCreaId(i) == 1
)
{
ret_val = kTRUE;
break;
}
}
}
}
}
else Error("isConvPair","HTrackInfo objects not found");
return ret_val;
}
Bool_t HRichCutPairSim::isDalitzPair(HDiHitMatchSim* h)
{
Bool_t ret_val=kFALSE;
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isConvPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isConvPair","HHitMatchSim object 2 not found");
}
else Error("isDalitzPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
for (Int_t i=0;i<MAXPARTICLES;i++)
{
if (tt1->getPi0Dalitz(i)==1)
{
Int_t c1 = tt1->calcCorrCode(i);
for (Int_t j=0;j<MAXPARTICLES;j++)
{
Int_t c2 = tt2->calcCorrCode(j);
if (
c1==4 && c2==4 &&
tt2->getPi0Dalitz(j)==1 &&
tt2->getParId(j)+tt1->getParId(i)==5 &&
tt1->getCreaTrkNb(i)!=-1 &&
tt2->getCreaTrkNb(j)!=-1 &&
tt1->getCreaTrkNb(i)==tt2->getCreaTrkNb(j) &&
tt1->getCreaId(i) == 7
)
{
ret_val = kTRUE;
break;
}
}
}
}
}
else Error("isConvPair","HTrackInfo objects not found");
return ret_val;
}
Bool_t HRichCutPairSim::isEtaDalitzPair(HDiHitMatchSim* h)
{
Bool_t ret_val=kFALSE;
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isConvPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isConvPair","HHitMatchSim object 2 not found");
}
else Error("isDalitzPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
for (Int_t i=0;i<MAXPARTICLES;i++)
{
if (tt1->getCreaId(i) == 17)
{
Int_t c1 = tt1->calcCorrCode(i);
for (Int_t j=0;j<MAXPARTICLES;j++)
{
Int_t c2 = tt2->calcCorrCode(j);
if (
c1==4 && c2==4 &&
tt2->getParId(j)+tt1->getParId(i)==5 &&
tt1->getCreaTrkNb(i)!=-1 &&
tt2->getCreaTrkNb(j)!=-1 &&
tt1->getCreaTrkNb(i)==tt2->getCreaTrkNb(j) &&
tt2->getCreaId(j) == 17
)
{
ret_val = kTRUE;
break;
}
}
}
}
}
else Error("isConvPair","HTrackInfo objects not found");
return ret_val;
}
void HRichCutPairSim::getDalitzPairTrkNb(HDiHitMatchSim* h,Int_t &a, Int_t &b)
{
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isConvPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isConvPair","HHitMatchSim object 2 not found");
}
else Error("isDalitzPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
for (Int_t i=0;i<MAXPARTICLES;i++)
{
if (tt1->getPi0Dalitz(i)==1)
{
Int_t c1 = tt1->calcCorrCode(i);
for (Int_t j=0;j<MAXPARTICLES;j++)
{
Int_t c2 = tt2->calcCorrCode(j);
if (
c1==4 && c2==4 &&
tt2->getPi0Dalitz(j)==1 &&
tt2->getParId(j)+tt1->getParId(i)==5 &&
tt1->getCreaTrkNb(i)!=-1 &&
tt2->getCreaTrkNb(j)!=-1 &&
tt1->getCreaTrkNb(i)==tt2->getCreaTrkNb(j) &&
tt1->getCreaId(i) == 7
)
{
a = tt1->getTrkNb(i);
b = tt2->getTrkNb(j);
break;
}
}
}
}
}
else Error("isConvPair","HTrackInfo objects not found");
}
void HRichCutPairSim::getConvPairTrkNb(HDiHitMatchSim* h,Int_t &a, Int_t &b)
{
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isConvPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isConvPair","HHitMatchSim object 2 not found");
}
else Error("isDalitzPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
for (Int_t i=0;i<MAXPARTICLES;i++)
{
if (tt1->getConvLep(i)==1)
{
Int_t c1 = tt1->calcCorrCode(i);
for (Int_t j=0;j<MAXPARTICLES;j++)
{
Int_t c2 = tt2->calcCorrCode(j);
if (
c1==4 && c2==4 &&
tt2->getConvLep(j)==1 &&
tt2->getParId(j)+tt1->getParId(i)==5 &&
tt1->getCreaTrkNb(i)!=-1 &&
tt2->getCreaTrkNb(j)!=-1 &&
tt1->getCreaTrkNb(i)==tt2->getCreaTrkNb(j) &&
tt1->getCreaId(i) == 1
)
{
a = tt1->getTrkNb(i);
b = tt2->getTrkNb(j);
break;
}
}
}
}
}
else Error("isConvPair","HTrackInfo objects not found");
}
Bool_t HRichCutPairSim::isAllCombiPair(HDiHitMatchSim* h)
{
HRichCutPair c("default","default");
c.switchTo("2matchedGoodRing");c.switchTo("unlike",kFALSE);
c.switchTo("2fast",kFALSE);
if (h)
{
if (!c.check((HDiHitMatch*)h)) return kFALSE;
}
else Error("isCombiPair","HDiHitMatch object not found");
Bool_t ret_val=kTRUE;
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isCombiPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isCombiPair","HHitMatchSim object 2 not found");
}
else Error("isCombiPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
Int_t cc1=-1;
Int_t cc2=-1;
for (Int_t i=0;i<MAXPARTICLES;i++)
{
if (tt1->getTrkNb(i)!=-1 && tt1->calcCorrCode(i)==4) cc1=i;
if (tt2->getTrkNb(i)!=-1 && tt2->calcCorrCode(i)==4) cc2=i;
}
if ( cc1 != -1 && cc2 != -1)
{
if (tt1->getCreaTrkNb(cc1) == tt2->getCreaTrkNb(cc2) &&
tt1->getTrkNb(cc1) != tt2->getTrkNb(cc2) )
{
return kFALSE;
}
}
}
else Error("isCombiPair","HTrackInfo objects not found");
return ret_val;
}
Bool_t HRichCutPairSim::isLepCombiPair(HDiHitMatchSim* h)
{
Bool_t ret_val=kTRUE;
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isCombiPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isCombiPair","HHitMatchSim object 2 not found");
}
else Error("isCombiPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
if(h->getInvMass()<1) return kFALSE;
for (Int_t i=0;i<MAXPARTICLES;i++)
{
for (Int_t j=0;j<MAXPARTICLES;j++)
{
if (
(tt2->getParId(j)==2 && tt1->getParId(i)==3) ||
(tt2->getParId(j)==3 && tt1->getParId(i)==2) ||
(tt2->getParId(j)==2 && tt1->getParId(i)==2) ||
(tt2->getParId(j)==3 && tt1->getParId(i)==3)
)
{
if(
tt1->getCreaTrkNb(i)!=-1 &&
tt2->getCreaTrkNb(j)!=-1 &&
tt1->getCreaTrkNb(i)==tt2->getCreaTrkNb(j)
)
{
ret_val = kFALSE;
break;
}
}
else ret_val = kFALSE;
}
}
}
else Error("isCombiPair","HTrackInfo objects not found");
return ret_val;
}
Bool_t HRichCutPairSim::isFakePair(HDiHitMatchSim* h)
{
Bool_t ret_val=kTRUE;
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isFakePair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isFakePair","HHitMatchSim object 2 not found");
}
else Error("isFakePair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
for (Int_t i=0;i<MAXPARTICLES;i++)
{
Int_t c1 = tt1->calcCorrCode(i);
for (Int_t j=0;j<MAXPARTICLES;j++)
{
Int_t c2 = tt2->calcCorrCode(j);
if (c1==4 && c2==4)
{
ret_val = kFALSE;
break;
}
}
}
}
else Error("isFakePair","HTrackInfo objects not found");
return ret_val;
}
Bool_t HRichCutPairSim::isPhysCBPair(HDiHitMatchSim* h)
{
Bool_t ret_val=kFALSE;
HLinearCategory * cat = (HLinearCategory*) HRichUtilFunc::getCategory(catMatchHit);
HHitMatchSim *t1 = 0;
HHitMatchSim *t2 = 0;
HTrackInfo * tt1 = 0;
HTrackInfo * tt2 = 0;
if (cat)
{
t1 = (HHitMatchSim*)cat->getObject(h->getIndTrk1());
if (!t1) Error("isPhysCBPair","HHitMatchSim object 1 not found");
t2 = (HHitMatchSim*)cat->getObject(h->getIndTrk2());
if (!t2) Error("isPhysCBPair","HHitMatchSim object 2 not found");
}
else Error("isPhysCBPair","no category found");
if (t1) tt1 = t1->getTrackInfoObj();
if (t2) tt2 = t2->getTrackInfoObj();
if (tt1&&tt2)
{
for (Int_t i=0;i<MAXPARTICLES;i++)
{
Int_t c1 = tt1->calcCorrCode(i);
for (Int_t j=0;j<MAXPARTICLES;j++)
{
Int_t c2 = tt2->calcCorrCode(j);
if (
c1==4 && c2==4 &&
tt2->getParId(j)+tt1->getParId(i)==5 &&
tt1->getCreaTrkNb(i)!=-1 &&
tt2->getCreaTrkNb(j)!=-1 &&
tt1->getCreaTrkNb(i)!=tt2->getCreaTrkNb(j)
)
{
ret_val = kTRUE;
break;
}
}
}
}
else Error("isConvPair","HTrackInfo objects not found");
return ret_val;
}
ClassImp(HRichCutPairSim)
Last change: Sat May 22 13:08:34 2010
Last generated: 2010-05-22 13:08
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.