23 TFoamMaxwt::TFoamMaxwt()
34 TFoamMaxwt::TFoamMaxwt(Double_t wmax, Int_t nBin)
39 fWtHst1 =
new TH1D(
"TFoamMaxwt_hst_Wt1",
"Histo of weight ",nBin,0.0,wmax);
40 fWtHst2 =
new TH1D(
"TFoamMaxwt_hst_Wt2",
"Histo of weight**2",nBin,0.0,wmax);
41 fWtHst1->SetDirectory(0);
42 fWtHst2->SetDirectory(0);
48 TFoamMaxwt::TFoamMaxwt(TFoamMaxwt &From): TObject(From)
52 fWtHst1 = From.fWtHst1;
53 fWtHst2 = From.fWtHst2;
54 Error(
"TFoamMaxwt",
"COPY CONSTRUCTOR NOT TESTED!");
60 TFoamMaxwt::~TFoamMaxwt()
70 void TFoamMaxwt::Reset()
80 TFoamMaxwt& TFoamMaxwt::operator=(
const TFoamMaxwt &From)
82 if (&From ==
this)
return *
this;
85 fWtHst1 = From.fWtHst1;
86 fWtHst2 = From.fWtHst2;
93 void TFoamMaxwt::Fill(Double_t wt)
96 fWtHst1->Fill(wt,1.0);
104 void TFoamMaxwt::Make(Double_t eps, Double_t &MCeff)
106 Double_t wtLim,aveWt;
107 GetMCeff(eps, MCeff, wtLim);
109 std::cout<<
"00000000000000000000000000000000000000000000000000000000000000000000000"<<std::endl;
110 std::cout<<
"00 -->wtLim: No_evt ="<<fNent<<
" <Wt> = "<<aveWt<<
" wtLim= "<<wtLim<<std::endl;
111 std::cout<<
"00 -->wtLim: For eps = "<<eps <<
" EFFICIENCY <Wt>/wtLim= "<<MCeff<<std::endl;
112 std::cout<<
"00000000000000000000000000000000000000000000000000000000000000000000000"<<std::endl;
120 void TFoamMaxwt::GetMCeff(Double_t eps, Double_t &MCeff, Double_t &wtLim)
123 Double_t lowEdge,bin,bin1;
124 Double_t aveWt, aveWt1;
131 Double_t sumWt = 0.0;
132 for(ib=0;ib<=fnBin+1;ib++) {
133 sum += fWtHst1->GetBinContent(ib);
134 sumWt += fWtHst2->GetBinContent(ib);
136 if( (sum == 0.0) || (sumWt == 0.0) ) {
137 std::cout<<
"TFoamMaxwt::Make: zero content of histogram !!!,sum,sumWt ="<<sum<<sumWt<<std::endl;
142 for( ibX=fnBin+1; ibX>0; ibX--) {
143 lowEdge = (ibX-1.0)*fwmax/fnBin;
146 for( ib=0; ib<=fnBin+1; ib++) {
147 bin = fWtHst1->GetBinContent(ib);
148 bin1 = fWtHst2->GetBinContent(ib);
149 if(ib >= ibX) bin1=lowEdge*bin;
154 if( TMath::Abs(1.0-aveWt1/aveWt) > eps )
break;
158 if(ibX == (fnBin+1) ) {
161 std::cout<<
"+++++ wtLim undefined. Higher upper limit in histogram"<<std::endl;
162 }
else if( ibX == 1) {
165 std::cout<<
"+++++ wtLim undefined. Lower upper limit or more bins "<<std::endl;
167 wtLim= (ibX)*fwmax/fnBin;