fixed time range issue in single histo fit which was caused by a musrfit <-> DKS confusion. Asymmetry fit still has an issue which needs further investigations.

This commit is contained in:
suter_a 2019-09-21 19:29:51 +02:00
parent 9a955de4d6
commit afef9600b4

View File

@ -105,8 +105,7 @@ Double_t PFitterFcnDKS::operator()(const std::vector<Double_t>& par) const
ierr += fDKS.callLaunchChiSquare(FITTYPE_SINGLE_HISTO, fMemDataSingleHisto[i], fMemDataSingleHistoErr[i], dksp.fNoOfFitBins,
par.size(), dksp.fFun.size(), dksp.fMap.size(),
dksp.fStartTime , dksp.fPackedTimeResolution, chisq);
value += chisq;
value += chisq;
if (ierr != 0) {
std::cerr << "PFitterFcnDKS::operator(): **ERROR** Kernel launch for single histo failed!" << std::endl;
@ -252,6 +251,7 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
{
Int_t ierr = 0;
Int_t fitType = FITTYPE_UNDEFINED;
Int_t startTimeBin = -1, endTimeBin = -1, length = -1;
// if any device was allocated before, free the device resources
FreeDKS();
@ -339,22 +339,34 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
fValid = false;
return;
}
size = runData->GetValue()->size();
fMemDataSingleHisto[i] = fDKS.allocateMemory<Double_t>(size, ierr);
fMemDataSingleHistoErr[i] = fDKS.allocateMemory<Double_t>(size, ierr);
if (ierr != 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated single histo data set memory (i=" << i << ") on the GPU" << std::endl;
fValid = false;
return;
}
Int_t startTimeBin = fRunListCollection->GetStartTimeBin(MSR_FITTYPE_SINGLE_HISTO, i);
startTimeBin = fRunListCollection->GetStartTimeBin(MSR_FITTYPE_SINGLE_HISTO, i);
endTimeBin = fRunListCollection->GetEndTimeBin(MSR_FITTYPE_SINGLE_HISTO, i);
length = endTimeBin-startTimeBin;
if (startTimeBin < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** startTimeBin undefind (single histo fit)." << std::endl;
fValid = false;
return;
}
fDKS.writeData<double>(fMemDataSingleHisto[i], &runData->GetValue()->at(startTimeBin), size-startTimeBin);
fDKS.writeData<double>(fMemDataSingleHistoErr[i], &runData->GetError()->at(startTimeBin), size-startTimeBin);
if (endTimeBin < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** endTimeBin undefind (single histo fit)." << std::endl;
fValid = false;
return;
}
if (length < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed for single histo data set (i=" << i << ") from fRunListCollection." << std::endl;
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** (endTimeBin=" << endTimeBin << ") < (startTimeBin=" << startTimeBin << ")." << std::endl;
fValid = false;
return;
}
fMemDataSingleHisto[i] = fDKS.allocateMemory<Double_t>(length, ierr);
fMemDataSingleHistoErr[i] = fDKS.allocateMemory<Double_t>(length, ierr);
if (ierr != 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated single histo data set memory (i=" << i << ") on the GPU" << std::endl;
fValid = false;
return;
}
fDKS.writeData<double>(fMemDataSingleHisto[i], &runData->GetValue()->at(startTimeBin), length);
fDKS.writeData<double>(fMemDataSingleHistoErr[i], &runData->GetError()->at(startTimeBin), length);
}
if (fRunListCollection->GetNoOfSingleHisto() > 0)
fitType = FITTYPE_SINGLE_HISTO;
@ -369,22 +381,35 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
fValid = false;
return;
}
size = runData->GetValue()->size();
fMemDataAsymmetry[i] = fDKS.allocateMemory<Double_t>(size, ierr);
fMemDataAsymmetryErr[i] = fDKS.allocateMemory<Double_t>(size, ierr);
if (ierr != 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated asymmetry data set memory (i=" << i << ") on the GPU" << std::endl;
fValid = false;
return;
}
Int_t startTimeBin = fRunListCollection->GetStartTimeBin(MSR_FITTYPE_ASYM, i);
startTimeBin = fRunListCollection->GetStartTimeBin(MSR_FITTYPE_ASYM, i); //as35
endTimeBin = fRunListCollection->GetEndTimeBin(MSR_FITTYPE_ASYM, i); //as35
length = endTimeBin-startTimeBin;
std::cout << "debug> length=" << length << std::endl; //as35
if (startTimeBin < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** startTimeBin undefind (asymmetry fit)." << std::endl;
fValid = false;
return;
}
fDKS.writeData<double>(fMemDataAsymmetry[i], &runData->GetValue()->at(startTimeBin), size-startTimeBin);
fDKS.writeData<double>(fMemDataAsymmetryErr[i], &runData->GetError()->at(startTimeBin), size-startTimeBin);
if (endTimeBin < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** endTimeBin undefind (asymmetry fit)." << std::endl;
fValid = false;
return;
}
if (length < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed for asymmetry data set (i=" << i << ") from fRunListCollection." << std::endl;
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** (endTimeBin=" << endTimeBin << ") < (startTimeBin=" << startTimeBin << ")." << std::endl;
fValid = false;
return;
}
fMemDataAsymmetry[i] = fDKS.allocateMemory<Double_t>(length, ierr);
fMemDataAsymmetryErr[i] = fDKS.allocateMemory<Double_t>(length, ierr);
if (ierr != 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated asymmetry data set memory (i=" << i << ") on the GPU" << std::endl;
fValid = false;
return;
}
fDKS.writeData<double>(fMemDataAsymmetry[i], &runData->GetValue()->at(startTimeBin), length);
fDKS.writeData<double>(fMemDataAsymmetryErr[i], &runData->GetError()->at(startTimeBin), length);
}
if (fRunListCollection->GetNoOfAsymmetry() > 0) {
if (fitType == FITTYPE_UNDEFINED) {
@ -406,22 +431,34 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
fValid = false;
return;
}
size = runData->GetValue()->size();
fMemDataMuMinus[i] = fDKS.allocateMemory<Double_t>(size, ierr);
fMemDataMuMinusErr[i] = fDKS.allocateMemory<Double_t>(size, ierr);
if (ierr != 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated mu minus data set memory (i=" << i << ") on the GPU" << std::endl;
fValid = false;
return;
}
Int_t startTimeBin = fRunListCollection->GetStartTimeBin(MSR_FITTYPE_MU_MINUS, i);
startTimeBin = fRunListCollection->GetStartTimeBin(MSR_FITTYPE_MU_MINUS, i);
endTimeBin = fRunListCollection->GetEndTimeBin(MSR_FITTYPE_MU_MINUS, i);
length = endTimeBin-startTimeBin;
if (startTimeBin < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** startTimeBin undefind (mu minus fit)." << std::endl;
fValid = false;
return;
}
fDKS.writeData<double>(fMemDataMuMinus[i], &runData->GetValue()->at(startTimeBin), size-startTimeBin);
fDKS.writeData<double>(fMemDataMuMinusErr[i], &runData->GetError()->at(startTimeBin), size-startTimeBin);
if (endTimeBin < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** endTimeBin undefind (mu minus fit)." << std::endl;
fValid = false;
return;
}
if (length < 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed for mu minus data set (i=" << i << ") from fRunListCollection." << std::endl;
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** (endTimeBin=" << endTimeBin << ") < (startTimeBin=" << startTimeBin << ")." << std::endl;
fValid = false;
return;
}
fMemDataMuMinus[i] = fDKS.allocateMemory<Double_t>(length, ierr);
fMemDataMuMinusErr[i] = fDKS.allocateMemory<Double_t>(length, ierr);
if (ierr != 0) {
std::cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated mu minus data set memory (i=" << i << ") on the GPU" << std::endl;
fValid = false;
return;
}
fDKS.writeData<double>(fMemDataMuMinus[i], &runData->GetValue()->at(startTimeBin), length);
fDKS.writeData<double>(fMemDataMuMinusErr[i], &runData->GetError()->at(startTimeBin), length);
}
if (fRunListCollection->GetNoOfMuMinus() > 0) {
if (fitType == FITTYPE_UNDEFINED) {