
#include <Riostream.h>
#include <stdio.h>
#include <stdlib.h>

#include "TFile.h"
#include "TTree.h"
#include "TKey.h"
#include "TFile.h"

int main(int argc, char **argv){
  static const Int_t size=16000;
  static const Int_t nbins=1500;
  Int_t flag=0;
  TFile *fileout = new TFile("ciccino.root","RECREATE");
  TTree * tree = 0x0;
  tree = new TTree("T","Tree with tofarray");

  Short_t bincont[1500];
  for (Int_t i=0;i<1500;i++){
    bincont[i]=i;
  }    

  //"malloc" version

  Short_t *tofarray = (Short_t*)malloc(sizeof(Short_t)*size*nbins);
  for (Int_t i=0;i<size;i++){
    memcpy(tofarray+i*1500,bincont,sizeof(Short_t)*nbins);
   }

  // Short_t *p;  //non-working version: why???
  Short_t p[1500];  //working 
  tree->Branch("a",&p,"a[1500]/S",256000);
  for (Int_t i=0;i<size;i++){
    //    p=tofarray + i*1500 ;  //non-working: why???
    memcpy(p,tofarray+i*1500,sizeof(Short_t)*nbins); //working
    tree->Fill();
  }

  //array version
  /*
  Short_t tofarray[size][nbins];
  for (Int_t i=0;i<size;i++){
    memcpy(&tofarray[0][i],bincont,sizeof(Short_t)*nbins);
   }
  Short_t *p; 
  tree->Branch("a",&p,"a[1500]/S",256000);
  for (Int_t i=0;i<size;i++){
    p=&tofarray[i][0]  
    tree->Fill();
  }
  */
  tree->Write();
  fileout->Close();

  return 1;
}


