#pragma implementation
#include "hevent.h"
#include "heventheader.h"
#include "hdetector.h"
#include "hratreeext.h"
#include "hcategory.h"
#include "hmatrixcategory.h"
#include "hlinearcategory.h"
#include "hlinearcatiter.h"
#include "hlocation.h"
#include "hiterator.h"
#include "hdebug.h"
#include "hades.h"
#include "hypinfodef.h"
#include "hhyplist.h"
#include "hhypcomb.h"
#include "hhypchannel.h"
#include <iostream>
#include "hpidphysicsconstants.h"
using namespace std;
ClassImp(HHypList)
HHypList::HHypList(HHypList * OldList, Int_t IdxHypKine)
{
p_hypcomb = NULL;
c_nvaluealg = 0;
if (OldList != NULL) {
setIdxHypComb(OldList->getIdxHypComb());
HCategory *combCat =
gHades->getCurrentEvent()->getCategory(catHypComb);
if (combCat != NULL) {
p_hypcomb = (HHypComb *) combCat->getObject(idx_hypcomb);
if (p_hypcomb != NULL) {
prepareHypList();
} else {
cout << "\n HHypList::HHypList ERROR (p_hypcomb is NULL) \n";
}
} else {
cout << "\n HHypList::HHypList ERROR (combCat is NULL) \n";
}
if (IdxHypKine == -1)
setIdxHypKine(OldList->getIdxHypKine());
else
setIdxHypKine(IdxHypKine);
Int_t Ncomb = getNcomb();
if (Ncomb != 0) {
for (Int_t Icomb = 0; Icomb < Ncomb; Icomb++) {
setProbAlg(Icomb, OldList->getProbAlg(Icomb));
}
HCategory *combHyp =
gHades->getCurrentEvent()->getCategory(catHypList);
idx_hyplist = combHyp->getIndex(OldList);
}
} else {
cout << "\n HHypList::HHypList ERROR (OldList is NULL) \n";
}
}
HHypList::HHypList(HHypComb * HypComb, Int_t IdxHypKine)
{
p_hypcomb = HypComb;
setIdxHypKine(IdxHypKine);
if (p_hypcomb != NULL) {
prepareHypList();
} else {
cout << "\n ERROR: HHypList::HHypList (p_hypcomb is NULL) \n";
}
}
HHypList::HHypList(Int_t Idx_HypComb, Int_t IdxHypKine)
{
p_hypcomb = NULL;
setIdxHypComb(Idx_HypComb);
setIdxHypKine(IdxHypKine);
HCategory *combCat = gHades->getCurrentEvent()->getCategory(catHypComb);
if (combCat != NULL) {
p_hypcomb = (HHypComb *) combCat->getObject(idx_hypcomb);
if (p_hypcomb != NULL) {
prepareHypList();
} else {
cout << "ERROR: HHypList::HHypList (p_hypcomb is NULL) \n";
}
} else {
cout << "ERROR: HHypList::HHypList (combCat is NULL) \n";
}
}
Bool_t HHypList::Join(HHypList * addme)
{
#warning "Join can ONLY be used DIRECTLY AFTER the Filler!!!!!"
if (getNpart() != addme->getNpart()) {
Error("Join", "The NUMBER of particles has to be the same!");
return kFALSE;
}
if (addme->getNcomb() <= 0) {
Error("Join", "Nr of Combination <=0!");
return kFALSE;
}
Int_t oldncomb, ncomb;
oldncomb = getNcomb();
HCategory *combCat = gHades->getCurrentEvent()->getCategory(catHypComb);
if (combCat != NULL) {
HHypComb *p_hypcombadd;
p_hypcombadd = (HHypComb *) combCat->getObject(addme->getIdxHypComb());
if (p_hypcombadd != NULL) {
p_hypcomb->Join(p_hypcombadd);
} else {
cout << "\n HHypList::Join ERROR (p_hypcombadd is NULL) \n";
}
} else {
cout << "\n HHypList::Join ERROR (combCat is NULL) \n";
}
ncomb = getNcomb();
fprobalg.Set(ncomb);
for (Int_t Icomb = 0; Icomb < addme->getNcomb(); Icomb++) {
Int_t nci;
nci = Icomb + oldncomb;
setProbAlg(nci, addme->getProbAlg(Icomb));
}
addme->writeUserValues();
for (Int_t i = 0;; i++) {
Int_t my_iter, valueID;
Float_t value;
if (!addme->ReadNumberedUserValues(i, my_iter, valueID, value))
break;
setUserValue(valueID, value, my_iter + oldncomb);
}
return kTRUE;
}
void HHypList::Clear(const Option_t * opt)
{
fprobalg.Set(0);
fvaluealg.Set(0);
fuseralg.Set(0);
nvaluealg = 0;
c_nvaluealg = 0;
}
void HHypList::Restore(void)
{
HCategory *combCat = gHades->getCurrentEvent()->getCategory(catHypComb);
if (combCat != NULL) {
p_hypcomb = (HHypComb *) combCat->getObject(idx_hypcomb);
if (p_hypcomb == NULL) {
cout << "\n HHypList::HHypList ERROR (p_hypcomb is NULL) \n";
}
} else {
cout << "\n HHypList::HHypList ERROR (combCat is NULL) \n";
}
}
Bool_t HHypList::setListId(Int_t Id_list)
{
id_list = Id_list;
return kTRUE;
}
Int_t HHypList::getListId()
{
return id_list;
}
HHypList *HHypList::getParent()
{
HCategory *listCat = gHades->getCurrentEvent()->getCategory(catHypList);
if (listCat != NULL) {
return (HHypList *) listCat->getObject(idx_hyplist);
}
return NULL;
}
Bool_t HHypList::prepareHypList()
{
Int_t Ncomb = getNcomb();
idx_hyplist = -1;
nvaluealg = 0;
c_nvaluealg = 0;
if (Ncomb > 0) {
fprobalg.Set(Ncomb);
for (Int_t Icomb = 0; Icomb < Ncomb; Icomb++) {
setProbAlg(Icomb, p_hypcomb->getProbComb(Icomb));
}
return kTRUE;
} else {
cout << "ERROR: HHypList::prepareHypList (Ncomb is <=0) \n";
return kFALSE;
}
}
void HHypList::setUserValue(Int_t valueID, Float_t value, Int_t my_iter)
{
if (my_iter == -1)
my_iter = comb_iter;
if (c_nvaluealg >= MAX_USER_VALUES) {
std::cerr << " setUserValue > MAX_USER_VALUES" << std::endl;
return;
}
c_fvaluealg[c_nvaluealg] = value;
c_fuseralg[2 * c_nvaluealg] = my_iter;
c_fuseralg[2 * c_nvaluealg + 1] = valueID;
c_nvaluealg++;
}
Bool_t HHypList::getUserValue(Int_t valueID, Float_t & value, Int_t my_iter)
{
if (my_iter == -1)
my_iter = comb_iter;
for (Int_t i = 0; i < c_nvaluealg; i++) {
if ((c_fuseralg[2 * i] == my_iter) && (c_fuseralg[2 * i + 1] == valueID)) {
value = c_fvaluealg[i];
return kTRUE;
}
}
for (Int_t i = 0; i < nvaluealg; i++) {
if ((fuseralg[2 * i] == my_iter) && (fuseralg[2 * i + 1] == valueID)) {
value = fvaluealg[i];
return kTRUE;
}
}
if (idx_hyplist >= 0) {
HHypList *p = getParent();
if (p) {
Bool_t retval = p->getUserValue(valueID, value, my_iter);
return retval;
}
}
return kFALSE;
}
Bool_t HHypList::ReadNumberedUserValues(Int_t i, Int_t & my_iter,
Int_t & valueID, Float_t & value)
{
if (i < 0 || i >= nvaluealg)
return kFALSE;
my_iter = fuseralg[2 * i];
valueID = fuseralg[2 * i + 1];
value = fvaluealg[i];
return kTRUE;
}
Bool_t HHypList::writeUserValues(void)
{
if (c_nvaluealg == 0)
return kFALSE;
if (nvaluealg + c_nvaluealg > MAX_USER_VALUES) {
std::cerr << " writeUserValues > MAX_USER_VALUES" << std::endl;
return kFALSE;
}
fvaluealg.Set(nvaluealg + c_nvaluealg);
fuseralg.Set((nvaluealg + c_nvaluealg) * 2);
for (Int_t i = 0; i < c_nvaluealg; i++) {
fvaluealg[nvaluealg + i] = c_fvaluealg[i];
fuseralg[2 * (nvaluealg + i)] = c_fuseralg[2 * i];
fuseralg[2 * (nvaluealg + i) + 1] = c_fuseralg[2 * i + 1];
}
nvaluealg += c_nvaluealg;
c_nvaluealg = 0;
return kTRUE;
}
HPidTrackCand *HHypList::getPidTrackCand(Int_t Ipart)
{
Int_t idx = getIdxPidTrackCand(Ipart);
if (idx < 0)
return NULL;
HPidTrackCand *pTrackCand = NULL;
HCategory *pidtrackcandCat =
gHades->getCurrentEvent()->getCategory(catPidTrackCand);
pTrackCand = (HPidTrackCand *) pidtrackcandCat->getObject(idx);
return pTrackCand;
}
HPidTrackCand *HHypList::getPidTrackCand(const Char_t *name, Int_t num)
{
Int_t idx = getIdxPidTrackCand(name,num);
if (idx < 0)
return NULL;
HPidTrackCand *pTrackCand = NULL;
HCategory *pidtrackcandCat =
gHades->getCurrentEvent()->getCategory(catPidTrackCand);
pTrackCand = (HPidTrackCand *) pidtrackcandCat->getObject(idx);
return pTrackCand;
}
Int_t HHypList::getNcomb()
{
if( p_hypcomb==0){
Error("getNcomb","Internal Error: HypList with HypComb==0");
print();
return(0);
}
return p_hypcomb->getNcomb();
}
Int_t HHypList::getNpart()
{
return p_hypcomb->getNpart();
}
Int_t HHypList::getNvalid(Int_t Icomb)
{
return p_hypcomb->getNvalid(Icomb);
}
Int_t HHypList::getNvalid(void)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return -1;
}
return getNvalid(comb_iter);
}
Float_t HHypList::getProbComb(Int_t Icomb)
{
return p_hypcomb->getProbComb(Icomb);
}
Int_t HHypList::getOrder(void)
{
Int_t better = 0;
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return -1;
}
for (Int_t i = 0; i < p_hypcomb->getNcomb(); i++) {
if (getProbAlg(i) > getProbAlg())
better++;
}
return better + 1;
}
TLorentzVector HHypList::getTLorentzVector(Int_t Icomb, Int_t Ipart)
{
TLorentzVector Vect;
if (getIdxHypKine() == -1) {
HPidTrackCand *pTrackCand = NULL;
HCategory *pidtrackcandCat =
gHades->getCurrentEvent()->getCategory(catPidTrackCand);
if (pidtrackcandCat != NULL) {
pTrackCand =
(HPidTrackCand *) pidtrackcandCat->getObject(getIdxPidTrackCand(Icomb, Ipart));
if (pTrackCand != NULL) {
Double_t Mass = HPidPhysicsConstants::mass(getPid(Icomb, Ipart));
TVector3 Vect3;
Vect3.SetMagThetaPhi(
pTrackCand->getTrackData()->getMomenta(ALG_RUNGEKUTTA),
pTrackCand->getTrackData()->getRKTheta()*TMath::DegToRad(),
pTrackCand->getTrackData()->getRKPhi()*TMath::DegToRad()
);
Vect.SetVectM(Vect3, Mass);
} else {
cout << "ERROR: HHypList::getTLorentzVector (pTrackCand is NULL) \n";
}
} else {
cout << "ERROR: HHypList::getTLorentzVector (pidtrackcandCat is NULL) \n";
}
} else {
HHypKine *HypKine = NULL;
HCategory *hypkineCat =
gHades->getCurrentEvent()->getCategory(catHypKine);
if (hypkineCat != NULL) {
HypKine = (HHypKine *) hypkineCat->getObject(getIdxHypKine());
if (HypKine != NULL) {
Vect = HypKine->getTLorentzVector(Icomb, Ipart);
} else {
cout << "ERROR: HHypList::getTLorentzVector (HypKine is NULL) \n";
}
} else {
cout << "ERROR: HHypList::getTLorentzVector (hypkineCat is NULL) \n";
}
}
return Vect;
}
TLorentzVector HHypList::getTLorentzVector(Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return TLorentzVector();
}
return getTLorentzVector(comb_iter, num);
}
TLorentzVector HHypList::getTLorentzVector(const Char_t *name, Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return TLorentzVector();
}
Int_t part_counter = -1;
Int_t part_num = 0;
Int_t part_id = HPidPhysicsConstants::pid(name);
while ((part_num != num) && (part_counter < (getNpart() - 1))) {
part_counter++;
if (part_id == getPid(comb_iter, part_counter))
part_num++;
}
if (part_num == num) {
return getTLorentzVector(comb_iter, part_counter);
}
iterstatus = kFALSE;
return TLorentzVector();
}
Int_t HHypList::getIdxPidTrackCand(Int_t Icomb, Int_t Ipart)
{
return p_hypcomb->getIdxPidTrackCand(Icomb, Ipart);
}
Int_t HHypList::getIdxPidTrackCand(Int_t Ipart)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return -1;
}
return getIdxPidTrackCand(comb_iter, Ipart);
}
Int_t HHypList::getIdxPidTrackCand(const Char_t *name, Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return -1;
}
Int_t part_counter = -1;
Int_t part_num = 0;
Int_t part_id = HPidPhysicsConstants::pid(name);
while ((part_num != num) && (part_counter < (getNpart() - 1))) {
part_counter++;
if (part_id == getPid(comb_iter, part_counter))
part_num++;
}
if (part_num == num) {
return getIdxPidTrackCand(comb_iter, part_counter);
}
iterstatus = kFALSE;
return -1;
}
Bool_t HHypList::isValidPart(Int_t Icomb, Int_t Ipart)
{
return (p_hypcomb->getIdxPidTrackCand(Icomb, Ipart)>=0);
}
Bool_t HHypList::isValidPart(Int_t Ipart)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return false;
}
return isValidPart(comb_iter, Ipart);
}
Bool_t HHypList::initcopyMomentum(void)
{
HHypKine *HypKine = NULL;
HCategory *hypkineCat =
gHades->getCurrentEvent()->getCategory(catHypKine);
if (hypkineCat != NULL) {
HLocation locDummy;
if (getIdxHypKine() == -1) {
HypKine = (HHypKine *) hypkineCat->getNewSlot(locDummy, &idx_hypkine);
if (HypKine != NULL)
HypKine = new(HypKine) HHypKine(idx_hypcomb);
else
return kFALSE;
} else {
HHypKine *OldHypKine = NULL;
OldHypKine = (HHypKine *) hypkineCat->getObject(getIdxHypKine());
if (OldHypKine != NULL) {
HypKine = (HHypKine *) hypkineCat->getNewSlot(locDummy, &idx_hypkine);
if (HypKine != NULL)
HypKine = new(HypKine) HHypKine(OldHypKine);
else
return kFALSE;
} else {
cout << "ERROR: HHypList::initCopyMomentum (OldHypKine is NULL) \n";
return kFALSE;
}
}
} else {
cout << "ERROR: HHypList::initcopyMomentum (hypkineCat is NULL) \n";
return kFALSE;
}
return kTRUE;
}
Bool_t HHypList::setMomentum(Int_t Icomb, Int_t Ipart, TVector3 vect)
{
if (getIdxHypKine() == -1)
{
Error("HHypList::setMomentum",
"Please use initcopyMomentum BEFORE calling any setMomentum. Please update Code from CVS!");
exit(0);
} else
{
HHypKine *HypKine = NULL;
HCategory *hypkineCat =
gHades->getCurrentEvent()->getCategory(catHypKine);
if (hypkineCat != NULL) {
HypKine = (HHypKine *) hypkineCat->getObject(getIdxHypKine());
if (HypKine != NULL) {
HypKine->setMomentum(Icomb, Ipart, vect);
} else {
cout << "ERROR: HHypList::setMomentum (HypKine is NULL) \n";
}
} else {
cout << "ERROR: HHypList::setMomentum (hypkineCat is NULL) \n";
}
}
return kTRUE;
}
Bool_t HHypList::setMomentum(Int_t Ipart, TVector3 vect)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return kFALSE;
}
return setMomentum(comb_iter, Ipart, vect);
}
Bool_t HHypList::setMomentum(const Char_t *name, Int_t num, TVector3 vect)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return kFALSE;
}
Int_t part_counter = -1;
Int_t part_num = 0;
Int_t part_id = HPidPhysicsConstants::pid(name);
while ((part_num != num) && (part_counter < (getNpart() - 1))) {
part_counter++;
if (part_id == getPid(comb_iter, part_counter))
part_num++;
}
if (part_num == num) {
return setMomentum(comb_iter, part_counter, vect);
}
iterstatus = kFALSE;
return kFALSE;
}
TVector3 HHypList::getMomentum(Int_t Icomb, Int_t Ipart)
{
TVector3 Vect3;
if (getIdxHypKine() == -1) {
HPidTrackCand *pTrackCand = NULL;
HCategory *pidtrackcandCat =
gHades->getCurrentEvent()->getCategory(catPidTrackCand);
if (pidtrackcandCat != NULL) {
pTrackCand =
(HPidTrackCand *) pidtrackcandCat->getObject(getIdxPidTrackCand(Icomb, Ipart));
if (pTrackCand != NULL) {
Vect3.SetMagThetaPhi(
pTrackCand->getTrackData()->getMomenta(ALG_RUNGEKUTTA),
pTrackCand->getTrackData()->getRKTheta()*TMath::DegToRad(),
pTrackCand->getTrackData()->getRKPhi()*TMath::DegToRad()
);
}
}
} else {
HHypKine *HypKine = NULL;
HCategory *hypkineCat =
gHades->getCurrentEvent()->getCategory(catHypKine);
if (hypkineCat != NULL) {
HypKine = (HHypKine *) hypkineCat->getObject(getIdxHypKine());
if (HypKine != NULL) {
Vect3 = (HypKine->getTLorentzVector(Icomb, Ipart)).Vect();
}
}
}
return Vect3;
}
TVector3 HHypList::getMomentum(Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return TVector3();
}
return getMomentum(comb_iter, num);
}
TVector3 HHypList::getOrigMomentum(Int_t Icomb, Int_t Ipart)
{
TVector3 Vect3;
{
HPidTrackCand *pTrackCand = NULL;
HCategory *pidtrackcandCat =
gHades->getCurrentEvent()->getCategory(catPidTrackCand);
if (pidtrackcandCat != NULL) {
pTrackCand =
(HPidTrackCand *) pidtrackcandCat->getObject(getIdxPidTrackCand(Icomb, Ipart));
if (pTrackCand != NULL) {
Vect3.SetMagThetaPhi(
pTrackCand->getTrackData()->getMomenta(ALG_RUNGEKUTTA),
pTrackCand->getTrackData()->getRKTheta()*TMath::DegToRad(),
pTrackCand->getTrackData()->getRKPhi()*TMath::DegToRad()
);
}
}
}
return Vect3;
}
TVector3 HHypList::getOrigMomentum(Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return TVector3();
}
return getOrigMomentum(comb_iter, num);
}
Float_t HHypList::getBeta(const Char_t *name, Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return 0;
}
Int_t part_counter = -1;
Int_t part_num = 0;
Int_t part_id = HPidPhysicsConstants::pid(name);
while ((part_num != num) && (part_counter < (getNpart() - 1))) {
part_counter++;
if (part_id == getPid(comb_iter, part_counter))
part_num++;
}
if (part_num == num) {
return getBeta(comb_iter, part_counter);
}
iterstatus = kFALSE;
return 0;
}
Float_t HHypList::getBeta(Int_t Icomb, Int_t Ipart)
{
Float_t beta = 0;
HPidTrackCand *pidTrackCand = NULL;
HCategory *pidtrackcandCat =
gHades->getCurrentEvent()->getCategory(catPidTrackCand);
if (pidtrackcandCat != NULL) {
pidTrackCand =
(HPidTrackCand *) pidtrackcandCat->getObject(getIdxPidTrackCand(Icomb, Ipart));
if (pidTrackCand) {
beta =
fabs(pidTrackCand->getTrackData()->getBeta(ALG_RUNGEKUTTA));
Float_t offset;
if (getUserValue(DELTATOF_OFFSET, offset, Icomb)) {
Double_t path =
pidTrackCand->getTrackData()->getPathLength(ALG_RUNGEKUTTA);
Double_t t_exp = path / (beta * 299.792458);
beta = path / ((t_exp + offset) * 299.792458);
}
}
}
return beta;
}
Float_t HHypList::getBeta(Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return 0;
}
return getBeta(comb_iter, num);
}
Bool_t HHypList::setProbAlg(Int_t Icomb, Float_t Prob)
{
if (Icomb < getNcomb()) {
fprobalg[Icomb] = Prob;
return kTRUE;
} else {
cout << "ERROR HHypList::setProbAlg (Icomb out of bounds)" << endl;
return kFALSE;
}
}
Float_t HHypList::getProbAlg(Int_t Icomb)
{
if (Icomb < getNcomb()) {
return fprobalg[Icomb];
} else {
cout << "ERROR HHypList::getProbAlg (Icomb out of bounds)" << endl;
return -1.0;
}
}
Float_t HHypList::getProbAlg(void)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return -1.;
}
return getProbAlg(comb_iter);
}
void HHypList::removeComb(void)
{
resetProbAlg(-1.);
}
void HHypList::KeepBestComb(void)
{
Double_t bestprob = -1, bestcomb = -1;
for (Int_t i = 0; i < p_hypcomb->getNcomb(); i++) {
if (getProbAlg(i) > bestprob) {
bestprob = getProbAlg(i);
bestcomb = i;
}
}
if (bestcomb < 0)
return;
for (Int_t i = 0; i < p_hypcomb->getNcomb(); i++) {
if (i != bestcomb)
setProbAlg(i, -1);
}
}
Bool_t HHypList::resetProbAlg(Float_t Prob)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return kFALSE;
}
setProbAlg(comb_iter, Prob);
return kTRUE;
}
Int_t HHypList::getPid(Int_t Icomb, Int_t Ipart)
{
return p_hypcomb->getPid(Icomb, Ipart);
}
Int_t HHypList::getPid(Int_t num)
{
if ((comb_iter >= p_hypcomb->getNcomb()) || (comb_iter < 0)) {
iterstatus = kFALSE;
return -1;
}
return getPid(comb_iter, num);
}
Bool_t HHypList::setIdxHypComb(Int_t Idx)
{
idx_hypcomb = Idx;
return kTRUE;
}
Int_t HHypList::getIdxHypComb()
{
return idx_hypcomb;
}
Bool_t HHypList::setIdxHypKine(Int_t Idx)
{
idx_hypkine = Idx;
return kTRUE;
}
Int_t HHypList::getIdxHypKine()
{
return idx_hypkine;
}
Bool_t HHypList::CombIteratorReset(void)
{
comb_iter = -1;
iterstatus = kTRUE;
return kTRUE;
}
Bool_t HHypList::getIterStatus(void)
{
return iterstatus;
}
void HHypList::resetIterStatus(void)
{
iterstatus = kTRUE;
}
Bool_t HHypList::CombIterator(void)
{
comb_iter++;
if (comb_iter >= p_hypcomb->getNcomb()) {
return kFALSE;
}
while ((comb_iter < p_hypcomb->getNcomb()) && (getProbAlg(comb_iter) < 0)) {
comb_iter++;
}
if ((comb_iter < p_hypcomb->getNcomb()) && (getProbAlg(comb_iter) >= 0)){
resetIterStatus();
return kTRUE;
}else
return kFALSE;
}
Bool_t HHypList::print()
{
cout << "HypList::Print()" << endl;
HHypChannel a;
cout<<"id_list: "<<id_list << " : " << a.Get(id_list) <<endl;
cout<<"idx_hyplist: "<<idx_hyplist << endl;
cout<<"idx_hypcomb: "<<idx_hypcomb << endl;
cout<<"idx_hypkine: "<<idx_hypkine << endl;
cout << "Index to pTrackCand and ProbComb and ProbAlg\n";
for (Int_t i = 0; i < getNcomb(); i++) {
for (Int_t j = 0; j < getNpart(); j++) {
cout << "\t" << getIdxPidTrackCand(i, j);
}
cout << "\t" << getProbComb(i) << "\t" << getProbAlg(i) << endl;
}
cout << "only PIDs and missing pid\n";
for (Int_t i = 0; i < getNcomb(); i++) {
for (Int_t j = 0; j < getNpart(); j++) {
cout << "\t" << getPid(i, j);
}
Float_t mpid;
if (!getUserValue(FILLER_MISSING_PID, mpid, i))
mpid = -999;
cout << "\t" << mpid << "\n";
}
cout << "\n";
if(p_hypcomb) p_hypcomb->print();
return kTRUE;
}
Float_t HHypList::getNrOfFakes(void)
{
Float_t fakes;
#warning "Calculation of Fakes only correct, if UserValue FILLER_VALID_PIDTRACKS is filled correctly, which was not the case before and needs to be checked in inclusive filler/multi channel filler"
if (getUserValue(FILLER_VALID_PIDTRACKS, fakes)){
fakes-=getNvalid();
}else{
fakes=-1;
}
return(fakes);
}
HCategory *HHypList::buildLinearCat(const Text_t * classname)
{
HLinearCategory *category = NULL;
Int_t size = 1000;
category = new HLinearCategory(classname, size);
category->setDynamicObjects(kTRUE);
return category;
}
#if 1
void HHypList::Streamer(TBuffer & R__b)
{
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion();
if (R__v == 1) {
TObject::Streamer(R__b);
R__b >> idx_hypcomb;
R__b >> idx_hypkine;
R__b >> idx_hyplist;
R__b >> id_list;
R__b >> nvaluealg;
for (Int_t i = 0; i < getNcomb(); i++) {
R__b >> fprobalg[i];
}
for (Int_t i = 0; i < nvaluealg; i++) {
R__b >> fvaluealg[i];
}
for (Int_t i = 0; i < (2 * nvaluealg); i++) {
R__b >> fuseralg[i];
}
} else if (R__v == 2) {
TObject::Streamer(R__b);
Int_t ncomb = 0;
R__b >> idx_hypcomb;
R__b >> idx_hypkine;
R__b >> idx_hyplist;
R__b >> id_list;
R__b >> nvaluealg;
R__b >> ncomb;
fprobalg.Set(ncomb);
fvaluealg.Set(nvaluealg);
fuseralg.Set(2 * nvaluealg);
for (Int_t i = 0; i < ncomb; i++) {
R__b >> fprobalg[i];
}
for (Int_t i = 0; i < nvaluealg; i++) {
R__b >> fvaluealg[i];
}
for (Int_t i = 0; i < (2 * nvaluealg); i++) {
R__b >> fuseralg[i];
}
} else {
cout << "HHypList::Streamer: version is not 1 or 2" << endl;
}
} else {
R__b.WriteVersion(HHypList::IsA());
TObject::Streamer(R__b);
R__b << idx_hypcomb;
R__b << idx_hypkine;
R__b << idx_hyplist;
R__b << id_list;
R__b << nvaluealg;
R__b << getNcomb();
for (Int_t i = 0; i < getNcomb(); i++) {
R__b << fprobalg[i];
}
for (Int_t i = 0; i < nvaluealg; i++) {
R__b << fvaluealg[i];
}
for (Int_t i = 0; i < (2 * nvaluealg); i++) {
R__b << fuseralg[i];
}
}
}
#endif
Last change: Sat May 22 12:57:49 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.