void track_check(Int_t nEntries = 100)
{
  gROOT->LoadMacro("$VMCWORKDIR/gconfig/rootlogon.C");
  rootlogon();
  TString inDigiFile  = "digi_complete.root"; 
  TString inPidFile  = "pid_complete.root"; 
  TString inRecoFile  = "reco_complete.root";
  TString inAlgoFile = "simparams.root";
  TString inSimFile = "sim_complete.root";
  
  TFile *inFile = TFile::Open(inPidFile,"READ");
  
  TTree *tree=(TTree *) inFile->Get("cbmsim") ;
  tree->AddFriend("cbmsim",inSimFile);
  tree->AddFriend("cbmsim",inDigiFile);
    
  //see: pnddata/PndDetectorList.h
  // TClonesArray* cand_array=new TClonesArray("PndPidCandidate");
  TClonesArray* track_array=new TClonesArray("PndTrktTrack");
  tree->SetBranchAddress("Track", &track_array);

  TClonesArray* mc_array=new TClonesArray("PndMCTrack");
  tree->SetBranchAddress("MCTrack", &mc_array);
  
  
  TFile *out = TFile::Open("out_test.root","RECREATE");
  TNtuple *nt = new TNtuple("nt","nt","evt:mc_p:mc_theta:mc_phi:mc_pid:mc_d0:mc_z0:mc_tanL:mc_omega:p:theta:phi:rec_d0:rec_z0:rec_tanL:rec_omega:pdg:mult");

  if (nEntries==0) nEntries =  tree->GetEntriesFast();
  for (Int_t j=0; j< nEntries; j++){
    tree->GetEntry(j);
  
    cout << "processing event " << j << "\n";
    
    Float_t mc_mom = 0, mc_theta = 0, mc_phi = 0;
    Float_t rec_mom = 0, rec_theta = 0, rec_phi = 0;
    Float_t mc_d0, mc_z0, mc_tanL, mc_omega, mc_R, mc_charge;
    Float_t mc_x0, mc_y0;
    Float_t rec_d0, rec_z0, rec_tanL, rec_omega, rec_R, rec_charge;
    Float_t rec_x0, rec_y0;
    for (Int_t mc = 0; mc < mc_array->GetEntriesFast(); mc++)
      {
	PndMCTrack *mctrack = (PndMCTrack*)mc_array->At(mc);
	if (mctrack->GetMotherID()!=-1) continue;
	mc_mom = mctrack->GetMomentum().Mag();
	mc_theta = mctrack->GetMomentum().Theta()*TMath::RadToDeg();
	mc_phi = mctrack->GetMomentum().Phi()*TMath::RadToDeg();
	
	
	//	mc_d0  = mctrack->GetPosition().X();
	//	mc_R = mctrack->GetRad();
	//mc_z0 = mctrack->GetZ();
	//mc_tanL = mctrack->GetTanL();
	//	mc_charge = -(Int_t) mctrack->GetCharge();
	//if(mc_mom!=0) mc_omega = mc_charge /  mc_mom;
	//	Double_t ptran = 0.003 * 2 * R;
	
	//	Double_t plong = ptran * tanl;
	//	Double_t ptot = sqrt(plong*plong + ptran*ptran);
	
	//mc_x0 = (mc_d0 + mc_R) * cos(mc_phi);
	//mc_y0 = (mc_d0 + mc_R) * sin(mc_phi);
	
	
	Int_t mc_pid = mctrack->GetPdgCode();
	Int_t cand_mult = 0;
	cout<<"ARRIVI QUI?"<<endl;
	//TrkData/PndTrkTrack
	for (Int_t pp=0; pp<track_array->GetEntriesFast(); pp++)
	  {
	    PndTrkTrack * mytrack = (PndTrkTrack*)track_array->At(pp);
	    cout<<"could you enter in the loop?"<<endl;
	  
	    //rec_d0  = mytrack->GetDist();
	    rec_z0 = mytrack->GetZ0();
	    rec_tanL = mytrack->GetTanL();
	    rec_R = mytrack->GetRadius();
	    cout<<"test = "<<mytrack->GetZ0()<<endl;
	    rec_charge = -(Int_t) mytrack->GetCharge();
	    double  rec_pt = mytrack->GetRadius()*0.006;
	    double rec_pl = mytrack->GetRadius()*rec_tanL*0.006;
	    rec_mom = TMath::Sqrt(rec_pt*rec_pt + rec_pl*rec_pl);
	    if(rec_mom!=0) rec_omega = rec_charge /  rec_mom;
	    
	    //	}
	  
	    cand_mult++;
	    
	  } // end of candidate loop
	
	Float_t ntuple[] = {j,mc_mom,mc_theta,mc_phi, mc_pid,mc_d0,mc_z0,mc_tanL,mc_omega,rec_mom, rec_theta*TMath::RadToDeg(), rec_phi*TMath::RadToDeg(), rec_d0, rec_z0, rec_tanL, rec_omega,mc_pid,cand_mult};
	nt->Fill(ntuple);
	
      } // end of MC loop
    
  }// end of event loop
  
  
  out->cd();
  
  nt->Write();
  out->Save();
  
}	
