- TH3D* projection = clone->Projection(iVar1,iVar2,iVar3);
- for (Int_t iBin=1; iBin<=GetNBins(iVar1); iBin++) projection->GetXaxis()->SetBinLabel(iBin,GetAxis(iVar1)->GetBinLabel(iBin));
- for (Int_t iBin=1; iBin<=GetNBins(iVar2); iBin++) projection->GetYaxis()->SetBinLabel(iBin,GetAxis(iVar2)->GetBinLabel(iBin));
- for (Int_t iBin=1; iBin<=GetNBins(iVar3); iBin++) projection->GetXaxis()->SetBinLabel(iBin,GetAxis(iVar3)->GetBinLabel(iBin));
+
+ TH3D* projection = 0x0 ;
+
+ TObject* objInMem = gROOT->FindObject(Form("%s_proj_%d_%d_%d",clone->GetName(),iVar1,iVar2,iVar3)) ;
+ if (objInMem) {
+ TString name(objInMem->ClassName());
+ if (name.CompareTo("TH3D")==0) projection = (TH3D*) objInMem ;
+ else projection = clone->Projection(iVar1,iVar2,iVar3);
+ }
+ else projection = clone->Projection(iVar1,iVar2,iVar3);
+ delete clone;
+ for (Int_t iBin=1; iBin<=GetNBins(iVar1); iBin++) {
+ TString binLabel = GetAxis(iVar1)->GetBinLabel(iBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetXaxis()->SetBinLabel(iBin,binLabel);
+ }
+ for (Int_t iBin=1; iBin<=GetNBins(iVar2); iBin++) {
+ TString binLabel = GetAxis(iVar2)->GetBinLabel(iBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetYaxis()->SetBinLabel(iBin,binLabel);
+ }
+ for (Int_t iBin=1; iBin<=GetNBins(iVar3); iBin++) {
+ TString binLabel = GetAxis(iVar3)->GetBinLabel(iBin) ;
+ if (binLabel.CompareTo("") != 0) projection->GetZaxis()->SetBinLabel(iBin,binLabel);
+ }