ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include "TMath.h"
#include "TRandom.h"
#include "TH2.h"
#include "TAxis.h"
#include "TBits.h"
#endif

const int    kNRow   = 650; 
const int    kNCol   = 750*2;
TBits bmap(kNRow*kNCol);

TH2 *hCl,*hRw,*hInd;

void cmbHufN(int nhit);
Int_t GetIndex(int col,int row) {return kNCol*row+col;}
void  GetColRow(int index, int &col, int &row) {
  col = index%kNCol;
  row = index/kNCol;
}


void cmbHuf(int ntst=100,int nhitMn=1,int nhitMx=0.001*kNRow*kNCol, int nbn=20)
{
  hCl  = new TH2F("hCl" ,"hCl" ,nbn,nhitMn-0.5,nhitMx+0.5,kNCol,0,kNCol);
  hRw  = new TH2F("hRw" ,"hRw" ,nbn,nhitMn-0.5,nhitMx+0.5,kNRow,0,kNRow);
  hInd = new TH2F("hInd","hInd",nbn,nhitMn-0.5,nhitMx+0.5,kNCol*kNRow,0,kNCol*kNRow);
  //
  TAxis* xax = hCl->GetXaxis();
  for (int ib=1;ib<=nbn;ib++) {    
    int nh = xax->GetBinCenter(ib);
    printf("Bin%d: nh=%d\n",ib,nh);
    for (int it=0;it<ntst;it++) cmbHufN(nh);
  }
  //
}

void cmbHufN(int nhit)
{
  bmap.ResetAllBits();
  for (int i=nhit;i--;) {
    int rw = gRandom->Integer(kNRow);
    int cl = gRandom->Integer(kNCol);
    bmap.SetBitNumber(GetIndex(cl,rw));
  }
  //
  int clp=0,rwp=0,indp=0;
  for (int ind=0;ind<kNRow*kNCol;ind++) {
    if (!bmap.TestBitNumber(ind)) continue;
    int cl,rw;
    GetColRow(ind,cl,rw);
    int dcl = cl-clp;
    int drw = rw-rwp;
    int dind= ind-indp;
    //
    hCl->Fill(nhit,dcl);
    hRw->Fill(nhit,drw);
    hInd->Fill(nhit,dind);
    //
    clp = cl;
    rwp = rw;
    indp = ind;
  }

}


 cmbHuf.C:1
 cmbHuf.C:2
 cmbHuf.C:3
 cmbHuf.C:4
 cmbHuf.C:5
 cmbHuf.C:6
 cmbHuf.C:7
 cmbHuf.C:8
 cmbHuf.C:9
 cmbHuf.C:10
 cmbHuf.C:11
 cmbHuf.C:12
 cmbHuf.C:13
 cmbHuf.C:14
 cmbHuf.C:15
 cmbHuf.C:16
 cmbHuf.C:17
 cmbHuf.C:18
 cmbHuf.C:19
 cmbHuf.C:20
 cmbHuf.C:21
 cmbHuf.C:22
 cmbHuf.C:23
 cmbHuf.C:24
 cmbHuf.C:25
 cmbHuf.C:26
 cmbHuf.C:27
 cmbHuf.C:28
 cmbHuf.C:29
 cmbHuf.C:30
 cmbHuf.C:31
 cmbHuf.C:32
 cmbHuf.C:33
 cmbHuf.C:34
 cmbHuf.C:35
 cmbHuf.C:36
 cmbHuf.C:37
 cmbHuf.C:38
 cmbHuf.C:39
 cmbHuf.C:40
 cmbHuf.C:41
 cmbHuf.C:42
 cmbHuf.C:43
 cmbHuf.C:44
 cmbHuf.C:45
 cmbHuf.C:46
 cmbHuf.C:47
 cmbHuf.C:48
 cmbHuf.C:49
 cmbHuf.C:50
 cmbHuf.C:51
 cmbHuf.C:52
 cmbHuf.C:53
 cmbHuf.C:54
 cmbHuf.C:55
 cmbHuf.C:56
 cmbHuf.C:57
 cmbHuf.C:58
 cmbHuf.C:59
 cmbHuf.C:60
 cmbHuf.C:61
 cmbHuf.C:62
 cmbHuf.C:63
 cmbHuf.C:64
 cmbHuf.C:65
 cmbHuf.C:66
 cmbHuf.C:67
 cmbHuf.C:68