using namespace std;
#include <stdlib.h>
#include <iostream>
#include "hhypHardCutsAlg.h"
#include "hpidalghardcuts.h"
#include "hypinfodef.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hpartialevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hpidgeanttrackset.h"
#include "hgeantheader.h"
ClassImp(HHypHardCutsAlg)
HHypHardCutsAlg::HHypHardCutsAlg(Char_t *name_i, Option_t par[])
:HHypBaseAlgorithm(name_i,par)
{
#if 0
TString * path = GetOpt("cutfile");
if (path == NULL) {
Error("HHypHardCutsAlg" , "no cutfile given");
}
sInFileName = *path;
#endif
pidParams = NULL;
pidParams2 = NULL;
bSim = kTRUE;
bCut8 = kTRUE;
bCut9 = kTRUE;
bCut14 = kTRUE;
#if 0
if (sInFileName.IsNull())
{
Error("HPidAlgHardCuts::init","No input file");
}
else
{
TFile *fFile;
Info("HPidAlgHardCuts::init","Load file: "+sInFileName);
fFile = TFile::Open(sInFileName,"READ");
GCut_8 = (TCutG*)fFile->Get("pid_8");
if (!GCut_8)
Warning("HPidAlgHardCuts::init","No pi+ cut");
else bCut8 = kTRUE;
GCut_9 = (TCutG*)fFile->Get("pid_9");
if (!GCut_9)
Warning("HPidAlgHardCuts::init","No input file");
else bCut9 = kTRUE;
GCut_14 = (TCutG*)fFile->Get("pid_14");
if (!GCut_14)
Warning("HPidAlgHardCuts::init","No input file");
else bCut14 = kTRUE;
}
#endif
}
HHypHardCutsAlg::~HHypHardCutsAlg()
{
}
Bool_t HHypHardCutsAlg::execute()
{
if (!beam) {
cerr << algoName << " needs beam particle! " << endl;
return kFALSE;
}
mylist->CombIteratorReset();
while (mylist->CombIterator()) {
Bool_t removeComb = kFALSE;
for (Int_t i = 0; i < mylist->getNvalid(); i++) {
if(!mylist->isValidPart(i)) continue;
Bool_t isLep = kFALSE;
Int_t hyppid = mylist->getPid(i);
HPidTrackCand *particle = mylist->getPidTrackCand(i);
HPidHitData * pHitData = particle->getHitData();
Int_t iSelectedMomAlg = particle->getTrackData()->getBestMomAlg();
if (pHitData->hasRingCorrelation[iSelectedMomAlg] && ((isLepInRich(2, pHitData)
|| (isLepInRich(3, pHitData))))) isLep=kTRUE;
Double_t my_beta, my_momentum;
my_beta=mylist->getBeta(i);
my_momentum=(mylist->getMomentum(i)).Mag();
if (bCut14 && hyppid == 14 && !GCut_14->IsInside(my_beta,my_momentum) ) {
removeComb = kTRUE;
}
if (bCut8 && hyppid == 8 && !GCut_8->IsInside(my_beta,my_momentum) ) {
removeComb = kTRUE;
}
if (bCut9 && hyppid == 9 && !GCut_9->IsInside(my_beta, -my_momentum) ) {
removeComb = kTRUE;
}
if ((hyppid == 2) || (hyppid == 3)) {
if (!isLep) removeComb = kTRUE;
}
if ((hyppid != 2) && (hyppid != 3)) {
if (isLep) removeComb = kTRUE;
}
Double_t my_charge;
my_charge=particle->getTrackData()->getPolarity(ALG_RUNGEKUTTA);
if( HPidPhysicsConstants::charge(hyppid)!=my_charge){
Error("Execute","PidTrackCand Charge!=Charge(HypPid)! Critical -> Filler not working or memory overwritten?");
cout << "! "<< hyppid<<": " <<HPidPhysicsConstants::charge(hyppid)<<" "<< my_charge << endl;
exit(0);
}
if(histofile){
qa->Fill(my_charge, my_beta, my_momentum, removeComb, isLep, hyppid,0);
}
}
#if 0
if ((removeComb) && (mylist->getProbAlg() > 0.1)) {
cout << "remove good combination" << endl;
}
else if ((!removeComb) && (mylist->getProbAlg() < 0.1)) {
cout << "keep bad combination" << endl;
}
#endif
if (removeComb) {
mylist->removeComb();
}
}
if (exitIdx > -1)
return kTRUE;
return kFALSE;
}
Bool_t HHypHardCutsAlg::init()
{
TString input(channel->Get(initList));
if((pidParams = (HPidAlgStandCutsPar *)gHades->getRuntimeDb()
->getContainer(PIDALGSTANDCUTSPAR_NAME)) == NULL)
{
Error("HHypHardCutsAlg::init", "Cannot get parameters: %s", PIDALGSTANDCUTSPAR_NAME);
return kFALSE;
}
if((pidParams2 = (HPidAlgHardCutsPar *)gHades->getRuntimeDb()
->getContainer("PidAlgHardCutsPar")) == NULL)
{
Error("HHypHardCutsAlg::init", "Cannot get parameters: %s", "PidAlgHardCutsPar");
return kFALSE;
}
pidParams2->registerCut("hardcut_pid_9");
pidParams2->registerCut("hardcut_pid_8");
pidParams2->registerCut("hardcut_pid_14");
if (histofile){
qa = new TNtuple(input + TString("_hardcut_debug"), "Hardcut Debug ntuple","charge:beta:mom:removed:islep:hyppid:genpid");
}
return kTRUE;
}
Bool_t HHypHardCutsAlg::reinit()
{
#if 1
GCut_8 = pidParams2->getCut("hardcut_pid_8");
if (!GCut_8)
{
Error("HPidAlgHardCuts::init","No pi+ cut");
return kFALSE;
}
GCut_9 = pidParams2->getCut("hardcut_pid_9");
if (!GCut_9)
{
Error("HPidAlgHardCuts::init","No pi- cut");
return kFALSE;
}
GCut_14 = pidParams2->getCut("hardcut_pid_14");
if (!GCut_14)
{
Error("HPidAlgHardCuts::init","No p cut");
return kFALSE;
}
#endif
return kTRUE;
}
Bool_t HHypHardCutsAlg::finalize()
{
if (histofile) qa->Write();
return kTRUE;
}
Bool_t HHypHardCutsAlg::isLepInRich(Int_t iPid,HPidHitData *pHitData)
{
Int_t sec = pHitData->getSector();
Stat_t iRingPatMatrThresh = pidParams->getValue(iPid,0,sec,0);
Float_t fRingCentroidThresh = pidParams->getValue(iPid,0,sec,1);
Stat_t iRingPadNrThres = pidParams->getValue(iPid,0,sec,2);
Float_t fRingAvChargeThres = pidParams->getValue(iPid,0,sec,3);
Float_t fRingAvChrg = ((Float_t)pHitData->nRingAmplitude)/((Float_t)pHitData->nRingPadNr);
if(pHitData->nRingPatMat <= iRingPatMatrThresh ) return kFALSE;
if(pHitData->fRingCentroid >= fRingCentroidThresh) return kFALSE;
if(pHitData->nRingPadNr <= iRingPadNrThres ) return kFALSE;
if(fRingAvChrg <= fRingAvChargeThres ) return kFALSE;
return kTRUE;
}
Last change: Sat May 22 12:57:44 2010
Last generated: 2010-05-22 12:57
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.