// $Id: hrichcuttracklet.cc,v 1.1 2004-10-15 08:21:00 eberl Exp $ // Last update by Thomas Eberl: 04/04/16 13:34:31 // using namespace std; #include #include #include #include #include #include #include #include #include #include "hhitmatch.h" #include "phyanadef.h" #include "hrichcuttracklet.h" #include "hrichcuto.h" #include "hkicktrack.h" #include "kickdef.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" HRichCutTracklet::HRichCutTracklet() : HRichCutO() { } HRichCutTracklet::HRichCutTracklet(Text_t *name, Text_t *title) : HRichCutO(name, title) { isExp=kFALSE; setStandardCuts(); TDatime dt; dt.Set(); TString stitle(title); stitle.Append("_"); stitle+=dt.GetDate(); stitle.Append("_"); stitle+=dt.GetTime(); SetTitle(stitle.Data()); setEvtType(0);//is exp } Bool_t HRichCutTracklet::switchTo(const char *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;iGetName()<<" not found"< %4.1f\n", nRingPadNr); if(kRingAvChrg) printf(" nRingAvChrg > %4.1f\n", nRingAvChrg); if(kRingCentroid) printf(" nRingCentroid > %4.1f\n",nRingCentroid); if(kRingPatMat) printf(" nRingPatMat > %4.1f\n", nRingPatMat); if(kRichMdcTheta) printf(" nRichMdcTheta < %4.1f\n",nRichMdcTheta); if(kRichMdcPhi) printf(" nRichMdcPhi < %4.1f\n", nRichMdcPhi); printf("----------------------------------------------\n\n"); return; } void HRichCutTracklet::printCutList() { // Prints a table of enabled cuts to stdio printf("\n-----------------------------------------------\n"); printf(" HRichCutTracklet cuts \n"); printf(" --------------------- \n"); if(kGoodRing) printf("cut on Good Ring active\n"); if(kAngularMatch) printf("cut on RICH_MDC matching active\n"); if(kRingPadNr) printf(" nRingPadNr > %4.1f\n", nRingPadNr); if(kRingAvChrg) printf(" nRingAvChrg > %4.1f\n", nRingAvChrg); if(kRingCentroid) printf(" nRingCentroid > %4.1f\n",nRingCentroid); if(kRingPatMat) printf(" nRingPatMat > %4.1f\n", nRingPatMat); if(kRichMdcTheta) printf(" nRichMdcTheta < %4.1f\n",nRichMdcTheta); if(kRichMdcPhi) printf(" nRichMdcPhi < %4.1f\n", nRichMdcPhi); printf("----------------------------------------------\n\n"); } Bool_t HRichCutTracklet::isAngMatch(HHitMatch *h) { // solid angle cut ! Bool_t ret_val=kFALSE; if ( (!kRichMdcTheta || TMath::Abs(h->getRichTheta() - h->getMdcTheta()) < nRichMdcTheta) && (!kRichMdcPhi || TMath::Abs(h->getRichPhi() - h->getMdcPhi())* TMath::Sin(TMath::DegToRad()*h->getMdcTheta()) < nRichMdcPhi) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isGoodRing(HHitMatch *h) { Bool_t ret_val=kFALSE; if ( (!kRingPatMat || h->getRingPatMat() > nRingPatMat) && (!kRingPadNr || h->getRingPadNr() > nRingPadNr) && (!kRingCentroid || h->getCentroid() < nRingCentroid) && (!kRingAvChrg || ((Float_t)h->getRingAmplitude())/((Float_t)h->getRingPadNr()) > nRingAvChrg) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isSector(HHitMatch *h) { Bool_t ret_val=kFALSE; if ( (!kSector || h->getSector() == nSector) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isSys(HHitMatch *h) { Bool_t ret_val=kFALSE; Int_t s,t; s=t=-1; s=h->getShowInd(); t=h->getTofInd(); Int_t lSys=-1; if (s>-1) lSys = 0; else if (t>-1) lSys = 1; else Error("HRichCutTracklet::isSys","no system in kicktrack"); if ( (!kSys || lSys == nSys) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isPull(HHitMatch *h) { Bool_t ret_val=kFALSE; Float_t p = h->getKickPull(); if ( (!kPull || p < nPull) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isEle(HHitMatch *h) { Bool_t ret_val=kFALSE; Int_t c = h->getKickCharge(); if ( (!kEle || c == -1) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isPos(HHitMatch *h) { Bool_t ret_val=kFALSE; Int_t c = h->getKickCharge(); if ( (!kPos || c == 1) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isMdcChi2(HHitMatch *h) { Bool_t ret_val=kFALSE; Float_t chi2 = h->getMdcClusterSize(); // how nice to have meaningful names if ( (!kMdcChi2 || chi2 > 0.) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isBetaGT(HHitMatch *h) { Bool_t ret_val=kFALSE; if ( (!kBetaGT || h->getKickBeta() > nBetaGT) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isBetaLT(HHitMatch *h) { Bool_t ret_val=kFALSE; if ( (!kBetaLT || h->getKickBeta() < nBetaLT) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isTofGT(HHitMatch *h) { Bool_t ret_val=kFALSE; Float_t tof = h->getTofTof(); Float_t tofino = h->getTofinoTof(); Float_t tmp = 0.; if (tof>0.) tmp = tof; else if (tofino>0.) tmp = tofino; if ( (!kTofGT || tmp > nTofGT) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isTofLT(HHitMatch *h) { Bool_t ret_val=kFALSE; Float_t tof = h->getTofTof(); Float_t tofino = h->getTofinoTof(); Float_t tmp = 0.; if (tof>0.) tmp = tof; else if (tofino>0.) tmp = tofino; if ( (!kTofLT || tmp < nTofLT) ) ret_val=kTRUE; return ret_val; } Bool_t HRichCutTracklet::isShowerCond(HHitMatch *h) { // check only in case of SHOWER was hit ! if (h->getShowInd() < 0) return kTRUE; Float_t fF10 = h->getShowerfSum1()/h->getShowerfSum0(); Float_t fF20 = h->getShowerfSum2()/h->getShowerfSum0(); Float_t p = h->getKickMom(); // Parameter and formula provided by J. Otwinowski, 2003-07-04 Double_t pPar1[]={-0.011, 0.00138, -0.000001027, 0.000000000266}; Double_t pPar2[]={-0.1057, 0.001178, -0.0000005453, 0.0000000000893}; Float_t fThr10 = 4.0 * (pPar1[0]+pPar1[1]*p+pPar1[2]*p*p+pPar1[3]*p*p*p); Float_t fThr20 = 4.0 * (pPar2[0]+pPar2[1]*p+pPar2[2]*p*p+pPar2[3]*p*p*p); if( fF10 <= fThr10 && fF20 <= fThr20 ) return kFALSE; else return kTRUE; } Bool_t HRichCutTracklet::isBetaMom3s(HHitMatch *h) { Bool_t ret_val = kFALSE; Float_t *bl0p=0; Float_t *bl0m=0; Float_t *bl1p=0; Float_t *bl1m=0; Float_t *bh1p=0; Float_t *bh1m=0; // TOFINO resolution is 0,15c, TOF is 0,03 roughly Float_t ebl0p[]={0.83, 0.815, 0.81, 0.81, 0.81, 0.808};//+TOFINO Float_t ebl0m[]={0.82, 0.815, 0.805, 0.8, 0.798, 0.798};//-TOFINO Float_t ebl1p[]={0.89, 0.9, 0.89, 0.88, 0.885, 0.89 };//+TOF Float_t ebl1m[]={0.88, 0.9, 0.9, 0.89, 0.89, 0.89 };//-TOF Float_t ebh1p[]={1.155, 1.145, 1.145, 1.15, 1.145, 1.145};//+TOF Float_t ebh1m[]={1.155, 1.145, 1.145, 1.15, 1.145, 1.15 };//-TOF Float_t sbl0p[]={0.82, 0.83, 0.835, 0.835, 0.835, 0.835};//+TOFINO Float_t sbl0m[]={0.825, 0.815, 0.82, 0.83, 0.84, 0.84 };//-TOFINO Float_t sbl1p[]={0.94, 0.94, 0.94, 0.94, 0.94, 0.935};//+TOF Float_t sbl1m[]={0.945, 0.942, 0.94, 0.94, 0.94, 0.94 };//-TOF Float_t sbh1p[]={1.09, 1.085, 1.08, 1.08, 1.08, 1.1 };//+TOF Float_t sbh1m[]={1.1, 1.09, 1.09, 1.08, 1.08, 1.075};//-TOF if (evtType==0)//exp { //cout<<"is exp"<getKickMom(); Float_t ch = h->getKickCharge(); Float_t beta= h->getKickBeta(); Int_t i = -1; if (mom<=100) i=0; else if (mom<=200) i=1; else if (mom<=300) i=2; else if (mom<=400) i=3; else if (mom<=500) i=4; else if (mom<=600) i=5; else i=5; Int_t s,t; s=t=-1; s=h->getShowInd(); t=h->getTofInd(); Int_t lSys=-1; if (s>-1) lSys = 0; else if (t>-1) lSys = 1; if (i!=-1) { if (lSys==0) { if (ch>0 && beta>bl0p[i]) ret_val=kTRUE; else if (ch<0 && beta>bl0m[i]) ret_val=kTRUE; } else if (lSys==1) { //cout<0 && beta>bl1p[i] && betabl1m[i] && betagetKickMom(); Float_t ch = h->getKickCharge(); Float_t pull= h->getKickPull(); Int_t i = -1; if (mom<=100) i=0; else if (mom<=200) i=1; else if (mom<=300) i=2; else if (mom<=400) i=3; else if (mom<=500) i=4; else if (mom<=600) i=5; else i=5; Int_t s,t; s=t=-1; s=h->getShowInd(); t=h->getTofInd(); Int_t lSys=-1; if (s>-1) lSys = 0; else if (t>-1) lSys = 1; if (i!=-1) { if (lSys==0) { if (ch>0 && pull>bl0p[i] && pullbl0m[i] && pull0 && pull>bl1p[i] && pullbl1m[i] && pull