Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "TGo4FitDataRidge.h"
00015
00016 #include "Riostream.h"
00017 #include "TArrayD.h"
00018 #include "TArrayF.h"
00019
00020 TGo4FitDataRidge::TGo4FitDataRidge() :
00021 TGo4FitData(), fxData(this, TGo4FitData::Class()), fiSelectedAxis(0) {
00022 }
00023
00024 TGo4FitDataRidge::TGo4FitDataRidge(const char* iName, TGo4FitData* Data, Int_t SelectedAxis) :
00025 TGo4FitData(iName,"Histogram transform", dtGraph, kFALSE),
00026 fxData("DataForRidge","Data, used to represent bins for ridge",
00027 this, TGo4FitData::Class(), kTRUE, Data, kTRUE),
00028 fiSelectedAxis(SelectedAxis) {
00029 SetExcludeLessThen(-1e50);
00030 }
00031
00032 TGo4FitDataRidge::~TGo4FitDataRidge() {
00033 }
00034
00035
00036 TGo4FitDataIter* TGo4FitDataRidge::MakeIter() {
00037 return new TGo4FitDataRidgeIter(this);
00038 }
00039
00040 void TGo4FitDataRidge::FillSlotList(TSeqCollection* list) {
00041 TGo4FitData::FillSlotList(list);
00042 list->Add(&fxData);
00043 if (GetData())
00044 GetData()->FillSlotList(list);
00045 }
00046
00047 void TGo4FitDataRidge::Print(Option_t* option) const {
00048 TGo4FitData::Print(option);
00049 if (GetData())
00050 GetData()->Print(option);
00051 std::cout << " selected axis for transform " << fiSelectedAxis << std::endl;
00052 }
00053
00054
00055
00056
00057 TGo4FitDataRidgeIter::TGo4FitDataRidgeIter() : TGo4FitDataIter(),
00058 fxData(0), iter(0), fxOwnScales() {
00059 }
00060
00061 TGo4FitDataRidgeIter::TGo4FitDataRidgeIter(TGo4FitDataRidge* data) :
00062 TGo4FitDataIter(), fxData(data), iter(0), fxOwnScales() {
00063 }
00064
00065 TGo4FitDataRidgeIter::~TGo4FitDataRidgeIter() {
00066 if (iter!=0) delete iter;
00067 }
00068
00069 Bool_t TGo4FitDataRidgeIter::StartReset() {
00070 if (iter!=0) { delete iter; iter = 0; }
00071
00072 if (fxData==0) return kFALSE;
00073 TGo4FitData* data = fxData->GetData();
00074 if (data==0) return kFALSE;
00075
00076 if (data->GetDataType() != TGo4FitData::dtHistogram ) {
00077 std::cout << " Only histogramic data can be used for transform " << std::endl;
00078 return kFALSE;
00079 }
00080
00081 iter = data->MakeIter();
00082 if ((iter==0) || (!iter->Reset(kTRUE))) return kFALSE;
00083
00084 fxOwnScales.Set(iter->ScalesSize()-1); fxOwnScales.Reset(0.);
00085
00086 return ReserveArrays(iter->IndexesSize(), iter->ScalesSize()-1, kFALSE);
00087 }
00088
00089 Bool_t TGo4FitDataRidgeIter::ReadCurrentPoint() {
00090 if ((iter==0) || (fxData==0)) return kFALSE;
00091
00092 if (!GetDeviation())
00093 {
00094 if (iter->Value()>0.)
00095 fdStandardDeviation = 1./iter->Value();
00096 else
00097 fdStandardDeviation = 0.;
00098 }
00099 Int_t n1=0;
00100 for (Int_t n=0;n<iter->ScalesSize();n++)
00101 if (n==fxData->GetSelectedAxis()) fdValue = iter->Scales()[n];
00102 else fxOwnScales[n1++] = iter->Scales()[n];
00103
00104 return ProduceScales(iter->Indexes(), fxOwnScales.GetArray(), 0);
00105 }
00106
00107 Bool_t TGo4FitDataRidgeIter::ShiftToNextPoint() {
00108 if (iter==0) return kFALSE;
00109 Bool_t res = iter->Next(kTRUE);
00110 while (res && (iter->Value()<=0.))
00111 res = iter->Next(kTRUE);
00112 return res;
00113 }
00114