void THSBins::RunTree(TTree* tree){ //create entry lists for tree TVectorD vVal(fNaxis);//values of variables for given entry //tree->SetBranchStatus("*","0");//faster if turnoff unused branches, don't use here as fit variables are not included in VarAxis for(Int_t j=0;j<fNaxis;j++){ // tree->SetBranchStatus(fVarAxis[j].GetName(),"1");//STATUS must be called before ADRESS!! see Important remarkse in TChain SetBranchStatus! tree->SetBranchAddress(fVarAxis[j].GetName(),&vVal[j]); } //Copy the tree branches to the list of trees for(Int_t i=0;i<fNbins;i++){ // fFile->cd();//clone tree is not working all the time when file is set?? TTree *newTree=tree->CloneTree(0); // newTree->SetDirectory(fFile); newTree->SetName(fBinNames[i]); fTrees->Add(newTree); } vector<Int_t> vBin(fNaxis); //store for the bin number of each axis for(Long64_t i=0;i<tree->GetEntries();i++){//loop over events tree->GetEntry(i); Bool_t InLimits=kTRUE; for(Int_t iA=0;iA<fNaxis;iA++)//first check var is within variable ranges if(vVal[iA]<fVarAxis[iA].GetXmin()||vVal[iA]>fVarAxis[iA].GetXmax()) InLimits=kFALSE; if(!InLimits) continue; //now find bin for each axis for(Int_t iA=0;iA<fNaxis;iA++){//loop over vars/axis for (int iB = 1; iB <= fVarAxis[iA].GetNbins(); iB++)//loop over bins if(vVal[iA]<fVarAxis[iA].GetBinUpEdge(iB)){vBin[iA]=iB;break;}//found it, next axis } //now have the bin for each axis, find the correct entry list Int_t theBin=-1; for(Int_t iA1=0;iA1<fNaxis-1;iA1++){ Int_t tbin=vBin[iA1]-1;//-1 as bin indexing starts at 1 with 0 underflow for(Int_t iA2=iA1+1;iA2<fNaxis;iA2++) tbin*=fVarAxis[iA2].GetNbins(); theBin+=tbin; } theBin+=vBin[fNaxis-1]; (dynamic_cast<TTree*>(fTrees->At(theBin)))->Fill(); } tree->SetBranchStatus("*",1); tree->ResetBranchAddresses(); for(Int_t i=0;i<fTrees->GetEntries();i++) (dynamic_cast<TTree*>(fTrees->At(i)))->ResetBranchAddresses(); gROOT->cd(); }
void THSBins::RunEntryList(TTree* tree){ //create entry lists for tree TVectorD vVal(fNaxis);//values of variables for given entry tree->SetBranchStatus("*","0");//faster if turnoff unused branches for(Int_t j=0;j<fNaxis;j++){ tree->SetBranchStatus(fVarAxis[j].GetName(),"1");//STATUS must be called before ADRESS!! see Important remarkse in TChain SetBranchStatus! tree->SetBranchAddress(fVarAxis[j].GetName(),&vVal[j]); } vector<Int_t> vBin(fNaxis); //store for the bin number of each axis for(Long64_t i=0;i<tree->GetEntries();i++){//loop over events tree->GetEntry(i); Bool_t InLimits=kTRUE; for(Int_t iA=0;iA<fNaxis;iA++)//first check var is within variable ranges if(vVal[iA]<fVarAxis[iA].GetXmin()||vVal[iA]>fVarAxis[iA].GetXmax()) InLimits=kFALSE; if(!InLimits) continue; //now find bin for each axis for(Int_t iA=0;iA<fNaxis;iA++){//loop over vars/axis //cout<<iA<<" val "<<vVal[iA]<<" "<<fVarAxis[iA].GetXmax()<<" "<<(vVal[iA]<fVarAxis[iA].GetXmin()||vVal[iA]>fVarAxis[iA].GetXmax())<<endl; for (int iB = 1; iB <= fVarAxis[iA].GetNbins(); iB++)//loop over bins if(vVal[iA]<fVarAxis[iA].GetBinUpEdge(iB)){vBin[iA]=iB;break;}//found it, next axis } //now have the bin for each axis, find the correct entry list Int_t theBin=-1; for(Int_t iA1=0;iA1<fNaxis-1;iA1++){ //cout<<vBin[iA1]<<" "; Int_t tbin=vBin[iA1]-1;//-1 as bin indexing starts at 1 with 0 underflow for(Int_t iA2=iA1+1;iA2<fNaxis;iA2++) tbin*=fVarAxis[iA2].GetNbins(); theBin+=tbin; } // cout<<vBin[fNaxis-1]<<" "; theBin+=vBin[fNaxis-1]; //cout<<" Bin "<<theBin<<" "<<fEntryLists->GetEntries()<<endl; (dynamic_cast<TEntryList*>(fEntryLists->At(theBin)))->Enter(i,tree); } tree->SetBranchStatus("*",1); tree->ResetBranchAddresses(); }
CStdFPoint Vec3BulletToAnimat(const btVector3 &vPoint) { CStdFPoint vVal(vPoint[0], vPoint[1], vPoint[2]); return vVal; }
btVector3 Vec3AnimatToBullet(const CStdFPoint &vPoint) { btVector3 vVal(vPoint.x, vPoint.y, vPoint.z); return vVal; }