#include "hparameter.h"
#include "hexpstring.h"
#include "hades.h"
#include "hcategory.h"
#include "hevent.h"
#include "hdataobject.h"
#include "hlocation.h"
#include "hindextransform.h"
#include "htofraw.h"
#include "htofhit.h"
#include "hrichraw.h"
#include "hrichcal.h"
#include "hrichhit.h"
#include "hshowerraw.h"
#include "hshowercal.h"
#include "hshowerhit.h"
#include "hmdccal1.h"
#include "hmdccal2.h"
#include "hmdchit.h"
#include "htofinoraw.h"
#include "TRandom.h"
ClassImp(HDefaultParameter)
ClassImp(HUserParameter)
TObject *dataobj;
Float_t HDefaultParameter::getValue(Int_t acat, Int_t idx, HLocation &aloc) {
if(!gHades) return 999999.;
HCategory *categ;
categ = gHades->getCurrentEvent()->getCategory(acat);
if(!categ) return 999999.;
dataobj = categ->getObject(aloc);
if(!dataobj) return 999999.;
if(!strcmp(dataobj->ClassName(),"HTofRaw")) return getTofRaw(idx);
if(!strcmp(dataobj->ClassName(),"HTofHit")) return getTofHit(idx);
if(!strcmp(dataobj->ClassName(),"HRichRaw")) return getRichRaw(idx);
if(!strcmp(dataobj->ClassName(),"HRichCal")) return getRichCal(idx);
if(!strcmp(dataobj->ClassName(),"HRichHit")) return getRichHit(idx);
if(!strcmp(dataobj->ClassName(),"HShowerRaw")) return getShowerRaw(idx);
if(!strcmp(dataobj->ClassName(),"HShowerCal")) return getShowerCal(idx);
if(!strcmp(dataobj->ClassName(),"HShowerHit")) return getShowerHit(idx);
if(!strcmp(dataobj->ClassName(),"HMdcCal1")) return getMdcCal1(idx);
if(!strcmp(dataobj->ClassName(),"HMdcCal2")) return getMdcCal2(idx);
if(!strcmp(dataobj->ClassName(),"HMdcHit")) return getMdcHit(idx);
if(!strcmp(dataobj->ClassName(),"HTofinoRaw")) return getTofinoRaw(idx);
return 999999.;
}
Float_t HDefaultParameter::getTofRaw(Int_t idx) {
if(idx==0 || idx==1) {
Int_t maxind[3] = { 6, 8, 8 };
Int_t hit[3];
hit[0] = (Int_t) (((HTofRaw*) dataobj)->getSector());
hit[1] = (Int_t) (((HTofRaw*) dataobj)->getModule());
hit[2] = (Int_t) (((HTofRaw*) dataobj)->getCell());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(3,maxind,hit));
return cell;
}
if(idx==TOF_RAW_T1) return ((HTofRaw*) dataobj) -> getLeftTime();
if(idx==TOF_RAW_T2) return ((HTofRaw*) dataobj) -> getRightTime();
if(idx==TOF_RAW_A1) return ((HTofRaw*) dataobj) -> getLeftCharge();
if(idx==TOF_RAW_A2) return ((HTofRaw*) dataobj) -> getRightCharge();
return 999999.;
}
Float_t HDefaultParameter::getTofHit(Int_t idx) {
Int_t sec, mod, rod;
Float_t xpos;
Float_t dist, x, y, z;
Float_t theta = 0.;
Float_t phi = 0.;
if(idx==0 || idx==1) {
Int_t maxind[3] = { 6, 8, 8 };
Int_t hit[3];
hit[0] = (Int_t) (((HTofHit*) dataobj)->getSector());
hit[1] = (Int_t) (((HTofHit*) dataobj)->getModule());
hit[2] = (Int_t) (((HTofHit*) dataobj)->getCell());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(3,maxind,hit));
return cell;
}
if(idx==TOF_HIT_TOF) return ((HTofHit*) dataobj) -> getTof();
if(idx==TOF_HIT_X) return ((HTofHit*) dataobj) -> getXpos();
sec = (Int_t) ((HTofHit*) dataobj)->getSector();
mod = (Int_t) ((HTofHit*) dataobj)->getModule();
rod = (Int_t) ((HTofHit*) dataobj)->getCell();
xpos = (Float_t) ((HTofHit*) dataobj)->getXpos();
((HTofHit*) dataobj)->getXYZLab(x,y,z);
((HTofHit*) dataobj)->getDistance(dist);
((HTofHit*) dataobj)->getTheta(theta);
((HTofHit*) dataobj)->getPhi(phi);
if(idx==TOF_HIT_XLAB) return x;
if(idx==TOF_HIT_YLAB) return y;
if(idx==TOF_HIT_ZLAB) return z;
if(idx==TOF_HIT_DIST) return dist;
if(idx==TOF_HIT_THETA) return theta;
if(idx==TOF_HIT_PHI) return phi;
return 999999.;
}
Float_t HDefaultParameter::getRichRaw(Int_t idx) {
if(idx==0) {
Int_t maxind[3] = { 6, 96, 96 };
Int_t hit[3];
hit[0] = (Int_t) (((HRichRaw*) dataobj)->getSector());
hit[1] = (Int_t) (((HRichRaw*) dataobj)->getRow());
hit[2] = (Int_t) (((HRichRaw*) dataobj)->getCol());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(3,maxind,hit));
return cell;
}
if(idx==RICH_RAW_CHARGE) return ((HRichRaw*) dataobj) -> getCharge();
if(idx==RICH_RAW_ROW) return ((Float_t) (((HRichRaw*) dataobj) -> getRow()));
if(idx==RICH_RAW_COL) return ((Float_t) (((HRichRaw*) dataobj) -> getCol()));
return 999999.;
}
Float_t HDefaultParameter::getRichCal(Int_t idx) {
if(idx==0) {
Int_t maxind[3] = { 6, 96, 96 };
Int_t hit[3];
hit[0] = (Int_t) (((HRichCal*) dataobj)->getSector());
hit[1] = (Int_t) (((HRichCal*) dataobj)->getRow());
hit[2] = (Int_t) (((HRichCal*) dataobj)->getCol());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(3,maxind,hit));
return cell;
}
if(idx==RICH_CAL_CHARGE) return ((HRichCal*) dataobj) -> getCharge();
if(idx==RICH_CAL_ROW) return ((Float_t) (((HRichCal*) dataobj) -> getRow()));
if(idx==RICH_CAL_COL) return ((Float_t) (((HRichCal*) dataobj) -> getCol()));
return 999999.;
}
Float_t HDefaultParameter::getRichHit(Int_t idx) {
Float_t retval;
Float_t temp, temp2;
retval = 999999.;
if(idx==RICH_HIT_LOCALX) retval = (Float_t) (((HRichHit*) dataobj)
->iRingX);
if(idx==RICH_HIT_LOCALY) retval = (Float_t) (((HRichHit*) dataobj)
->iRingY);
if(idx==RICH_HIT_LABX) ((HRichHit*) dataobj)
-> getLabXYZ(&retval, &temp, &temp2);
if(idx==RICH_HIT_LABY) ((HRichHit*) dataobj)
-> getLabXYZ(&temp, &retval, &temp2);
if(idx==RICH_HIT_LABZ) ((HRichHit*) dataobj)
-> getLabXYZ(&temp, &temp2, &retval);
if(idx==RICH_HIT_THETA) retval = ((HRichHit*) dataobj)
-> getTheta();
if(idx==RICH_HIT_PHI) retval = ((HRichHit*) dataobj)
-> getPhi();
return retval;
}
Float_t HDefaultParameter::getShowerRaw(Int_t idx) {
if(idx==0) {
Int_t maxind[4] = { 6, 3, 32, 32 };
Int_t hit[4];
hit[0] = (Int_t) (((HShowerRaw*) dataobj)->getSector());
hit[1] = (Int_t) (((HShowerRaw*) dataobj)->getModule());
hit[2] = (Int_t) (((HShowerRaw*) dataobj)->getRow());
hit[3] = (Int_t) (((HShowerRaw*) dataobj)->getCol());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(4,maxind,hit));
return cell;
}
if(idx==SHOWER_RAW_CHARGE) return ((HShowerRaw*) dataobj) -> getCharge();
return 999999.;
}
Float_t HDefaultParameter::getShowerCal(Int_t idx) {
if(idx==0) {
Int_t maxind[4] = { 6, 3, 32, 32 };
Int_t hit[4];
hit[0] = (Int_t) (((HShowerCal*) dataobj)->getSector());
hit[1] = (Int_t) (((HShowerCal*) dataobj)->getModule());
hit[2] = (Int_t) (((HShowerCal*) dataobj)->getRow());
hit[3] = (Int_t) (((HShowerCal*) dataobj)->getCol());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(4,maxind,hit));
return cell;
}
if(idx==SHOWER_CAL_CHARGE) return ((HShowerCal*) dataobj) -> getCharge();
return 999999.;
}
Float_t HDefaultParameter::getShowerHit(Int_t idx) {
Float_t retval;
Float_t temp, temp2;
retval = 999999.;
if(idx==0) {
Int_t maxind[4] = { 6, 3, 32, 32 };
Int_t hit[4];
hit[0] = (Int_t) (((HShowerHit*) dataobj)->getSector());
hit[1] = (Int_t) (((HShowerHit*) dataobj)->getModule());
hit[2] = (Int_t) (((HShowerHit*) dataobj)->getRow());
hit[3] = (Int_t) (((HShowerHit*) dataobj)->getCol());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(4,maxind,hit));
return cell;
}
if(idx==SHOWER_HIT_LOCALX) ((HShowerHit*) dataobj)
-> getXY(&retval, &temp);
if(idx==SHOWER_HIT_LOCALY) ((HShowerHit*) dataobj)
-> getXY(&temp, &retval);
if(idx==SHOWER_HIT_LABX) ((HShowerHit*) dataobj)
-> getLabXYZ(&retval, &temp, &temp2);
if(idx==SHOWER_HIT_LABY) ((HShowerHit*) dataobj)
-> getLabXYZ(&temp, &retval, &temp2);
if(idx==SHOWER_HIT_LABZ) ((HShowerHit*) dataobj)
-> getLabXYZ(&temp, &temp2, &retval);
return retval;
}
Float_t HDefaultParameter::getMdcCal1(Int_t idx) {
if(idx==0) {
Int_t maxind[4] = { 6, 4, 6, 200 };
Int_t hit[4];
hit[0] = (Int_t) (((HMdcCal1*) dataobj)->getSector());
hit[1] = (Int_t) (((HMdcCal1*) dataobj)->getModule());
hit[2] = (Int_t) (((HMdcCal1*) dataobj)->getLayer());
hit[3] = (Int_t) (((HMdcCal1*) dataobj)->getCell());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(4,maxind,hit));
return cell;
}
if(idx==MDC_CAL1_T1) return ((HMdcCal1*) dataobj) -> getTime1();
if(idx==MDC_CAL1_T2) return ((HMdcCal1*) dataobj) -> getTime2();
return 999999.;
}
Float_t HDefaultParameter::getMdcCal2(Int_t idx) {
if(idx==0) {
Int_t maxind[4] = { 6, 4, 6, 200 };
Int_t hit[4];
hit[0] = (Int_t) (((HMdcCal2*) dataobj)->getSector());
hit[1] = (Int_t) (((HMdcCal2*) dataobj)->getModule());
hit[2] = (Int_t) (((HMdcCal2*) dataobj)->getLayer());
hit[3] = (Int_t) (((HMdcCal2*) dataobj)->getCell());
Float_t cell = (Float_t) (HIndexTransform::mult2lin(4,maxind,hit));
return cell;
}
if(idx==MDC_CAL2_DIST1) return ((HMdcCal2*) dataobj) -> getDist1();
if(idx==MDC_CAL2_DIST2) return ((HMdcCal2*) dataobj) -> getDist2();
if(idx==MDC_CAL2_ERRDIST1) return ((HMdcCal2*) dataobj) -> getErrDist1();
if(idx==MDC_CAL2_ERRDIST2) return ((HMdcCal2*) dataobj) -> getErrDist2();
return 999999.;
}
Float_t HDefaultParameter::getMdcHit(Int_t idx) {
if(idx==MDC_HIT_X) return ((HMdcHit*) dataobj) -> getX();
if(idx==MDC_HIT_Y) return ((HMdcHit*) dataobj) -> getY();
if(idx==MDC_HIT_THETA) return ((HMdcHit*) dataobj) -> getTheta();
if(idx==MDC_HIT_PHI) return ((HMdcHit*) dataobj) -> getPhi();
return 999999.;
}
Float_t HDefaultParameter::getTofinoRaw(Int_t idx) {
return 999999.;
}
Int_t HDefaultParameter::getMaxDefIdx(Int_t acat) {
Int_t retval = 0;
switch(acat) {
case 96: { retval = 5; break; }
case 97: { retval = 9; break; }
case 2: { retval = 2; break; }
case 4: { retval = 4; break; }
case 1: { retval = 4; break; }
case 32: { retval = 3; break; }
case 34: { retval = 3; break; }
case 33: { retval = 7; break; }
case 64: { retval = 1; break; }
case 66: { retval = 1; break; }
case 65: { retval = 5; break; }
default: { retval = 0; break; }
}
return retval;
}
Float_t HDefaultParameter::getParameterValue(HLocation &aloc) {
Float_t retval = getValue(fCategory,fIndex,aloc);
return retval;
}
Bool_t HDefaultParameter::isEqual(HDefaultParameter *apar) {
if(!apar) return kFALSE;
if(apar->getCategory() != fCategory) return kFALSE;
if(apar->getIndex() != fIndex) return kFALSE;
return kTRUE;
}
Float_t HUserParameter::getParameterValue(HLocation &aloc) {
Float_t retval = 999999.;
if(!fExpression) return (getValue(fCategory,fIndex,aloc));
Double_t *argu = new Double_t[getMaxDefIdx(fCategory)];
if(!argu) return retval;
for(Int_t i=0; i<fParNumber; i++) {
argu[fParIdx[i]-1] = (Double_t) getValue(fCategory,fParIdx[i],aloc);
}
retval = (Float_t) fExpression->EvalPar(0,argu);
delete [] argu;
return retval;
}
void HUserParameter::addIndex(Int_t idx) {
if(idx <= 0 || idx > getMaxDefIdx(fCategory)) return;
if(fParNumber >= 10) return;
fParIdx[fParNumber++] = idx;
}
void HUserParameter::copy(TObject *hup) {
if(!hup) return;
TNamed::Copy(*hup);
if(fExpression)
((HUserParameter*)hup)->fExpression = (TFormula*) fExpression->Clone();
for(Int_t i=0; i<10; i++)
(*((HUserParameter*)hup)).fParIdx[i] = fParIdx[i];
((HUserParameter*)hup)->fParNumber = fParNumber;
((HUserParameter*)hup)->fCategory = fCategory;
((HUserParameter*)hup)->fIndex = fIndex;
}
void HUserParameter::setExpression(HExpString *pES) {
if(!pES) return;
pES->checkParam();
if(!pES->isValid()) return;
if(fExpression) {
delete fExpression;
fExpression = 0;
}
Char_t nullstr[50] = "";
if(!strcmp(nullstr,GetName()))
fExpression = new TFormula("formula",(*pES).exp);
else fExpression = new TFormula(GetName(),(*pES).exp);
for(Int_t i=0; i < (pES->parcur + 1); i++) {
if(!fParNumber) addIndex((*pES).paridx[i]+1);
for(Int_t j=0; j < fParNumber; j++) {
if(fParIdx[j] == (*pES).paridx[i] + 1) continue;
else addIndex((*pES).paridx[i]+1);
}
}
}
void HUserParameter::setName() {
Int_t value;
Char_t parname[50];
value = (Int_t) (gRandom->Rndm() * 1000);
switch(fCategory) {
case 96: { sprintf(parname,"%s%i","tofraw_",value); break; }
case 97: { sprintf(parname,"%s%i","tofhit_",value); break; }
case 2: { sprintf(parname,"%s%i","mdccal1_",value); break; }
case 4: { sprintf(parname,"%s%i","mdccal2_",value); break; }
case 1: { sprintf(parname,"%s%i","mdchit_",value); break; }
case 32: { sprintf(parname,"%s%i","richraw_",value); break; }
case 34: { sprintf(parname,"%s%i","richcal_",value); break; }
case 33: { sprintf(parname,"%s%i","richhit_",value); break; }
case 64: { sprintf(parname,"%s%i","showraw_",value); break; }
case 66: { sprintf(parname,"%s%i","showcal_",value); break; }
case 65: { sprintf(parname,"%s%i","showhit_",value); break; }
default: { sprintf(parname,"%i",value); break; }
}
SetName(parname);
if(fExpression) fExpression->SetName(parname);
}
Last change: Sat May 22 12:54:34 2010
Last generated: 2010-05-22 12:54
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.