ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/


// Class to read events from external (TNtupla) file
// Events -> neutron removal by EM dissociation of Pb nuclei
// Data from RELDIS code (by I. Pshenichov)

#include <TFile.h>
#include <TParticle.h>
#include <TTree.h>
#include <TVirtualMC.h>
#include <TDatabasePDG.h>
#include <TPDGCode.h>
#include "AliGenReaderEMD.h"
#include "AliStack.h"


ClassImp(AliGenReaderEMD)

AliGenReaderEMD::AliGenReaderEMD():
    fStartEvent(0),
    fNcurrent(0),  
    fNparticle(0), 
    fTreeNtuple(0),
    fPcToTrack(0),
    fOffset(0),
    fNnAside(0),
    fEnAside(0),
    fnPDGCode(0),
    fNnCside(0),
    fEnCside(0),
    fNpAside(0),
    fEtapAside(0),
    fpPDGCode(0),
    fNpCside(0),
    fEtapCside(0),
    fNppAside(0),
    fEtappAside(0),
    fppPDGCode(0),
    fNppCside(0),
    fEtappCside(0),
    fNpmAside(0),
    fEtapmAside(0),
    fpmPDGCode(0),
    fNpmCside(0),
    fEtapmCside(0),
    fNp0Aside(0),
    fEtap0Aside(0),
    fp0PDGCode(0),
    fNp0Cside(0),
    fEtap0Cside(0),
    fNetaAside(0),
    fEtaetaAside(0),
    fetaPDGCode(0),
    fNetaCside(0),
    fEtaetaCside(0),
    fNomegaAside(0),
    fEtaomegaAside(0),
    fomegaPDGCode(0),
    fNomegaCside(0),
    fEtaomegaCside(0)
{
// Std constructor
    for(int i=0; i<70; i++){
       fPxnAside[i] = fPynAside[i] = fPznAside[i] = 0.;
       fPxnCside[i] = fPynCside[i] = fPznCside[i] = 0.;
       if(i<50){
         fPxpAside[i] = fPypAside[i] = fPzpAside[i] = 0.;
      	 fPxpCside[i] = fPypCside[i] = fPzpCside[i] = 0.;
         if(i<30){
           fPxppAside[i] = fPyppAside[i] = fPzppAside[i] = 0.;
      	   fPxppCside[i] = fPyppCside[i] = fPzppCside[i] = 0.;
           fPxpmAside[i] = fPypmAside[i] = fPzpmAside[i] = 0.;
      	   fPxpmCside[i] = fPypmCside[i] = fPzpmCside[i] = 0.;
           fPxp0Aside[i] = fPyp0Aside[i] = fPzp0Aside[i] = 0.;
      	   fPxp0Cside[i] = fPyp0Cside[i] = fPzp0Cside[i] = 0.;
	   if(i<15){
             fPxetaAside[i] = fPyetaAside[i] = fPzetaAside[i] = 0.;
      	     fPxetaCside[i] = fPyetaCside[i] = fPzetaCside[i] = 0.;
             fPxomegaAside[i] = fPyomegaAside[i] = fPzomegaAside[i] = 0.;
      	     fPxomegaCside[i] = fPyomegaCside[i] = fPzomegaCside[i] = 0.;
	   }
	 }
       }	
    }
    if(fPcToTrack==kAll) printf("\n\t   *** AliGenReaderEMD will track all produced particles \n\n");
    else if(fPcToTrack==kNotNucleons) printf("\n\t   *** AliGenReaderEMD will track all produced particles except nucleons\n\n");
    else if(fPcToTrack==kOnlyNucleons) printf("\n\t   *** AliGenReaderEMD will track only nucleons\n\n");
}


AliGenReaderEMD::AliGenReaderEMD(const AliGenReaderEMD &reader):
    AliGenReader(reader),
    fStartEvent(0),
    fNcurrent(0),  
    fNparticle(0), 
    fTreeNtuple(0),
    fPcToTrack(0),
    fOffset(0),
    fNnAside(0),
    fEnAside(0),
    fnPDGCode(0),
    fNnCside(0),
    fEnCside(0),
    fNpAside(0),
    fEtapAside(0),
    fpPDGCode(0),
    fNpCside(0),
    fEtapCside(0),
    fNppAside(0),
    fEtappAside(0),
    fppPDGCode(0),
    fNppCside(0),
    fEtappCside(0),
    fNpmAside(0),
    fEtapmAside(0),
    fpmPDGCode(0),
    fNpmCside(0),
    fEtapmCside(0),
    fNp0Aside(0),
    fEtap0Aside(0),
    fp0PDGCode(0),
    fNp0Cside(0),
    fEtap0Cside(0),
    fNetaAside(0),
    fEtaetaAside(0),
    fetaPDGCode(0),
    fNetaCside(0),
    fEtaetaCside(0),
    fNomegaAside(0),
    fEtaomegaAside(0),
    fomegaPDGCode(0),
    fNomegaCside(0),
    fEtaomegaCside(0)
{
    // Copy Constructor
    for(int i=0; i<70; i++){
       fPxnAside[i] = fPynAside[i] = fPznAside[i] = 0.;
       fPxnCside[i] = fPynCside[i] = fPznCside[i] = 0.;
       if(i<50){
         fPxpAside[i] = fPypAside[i] = fPzpAside[i] = 0.;
      	 fPxpCside[i] = fPypCside[i] = fPzpCside[i] = 0.;
         if(i<30){
           fPxppAside[i] = fPyppAside[i] = fPzppAside[i] = 0.;
      	   fPxppCside[i] = fPyppCside[i] = fPzppCside[i] = 0.;
           fPxpmAside[i] = fPypmAside[i] = fPzpmAside[i] = 0.;
      	   fPxpmCside[i] = fPypmCside[i] = fPzpmCside[i] = 0.;
           fPxp0Aside[i] = fPyp0Aside[i] = fPzp0Aside[i] = 0.;
      	   fPxp0Cside[i] = fPyp0Cside[i] = fPzp0Cside[i] = 0.;
	   if(i<15){
             fPxetaAside[i] = fPyetaAside[i] = fPzetaAside[i] = 0.;
      	     fPxetaCside[i] = fPyetaCside[i] = fPzetaCside[i] = 0.;
             fPxomegaAside[i] = fPyomegaAside[i] = fPzomegaAside[i] = 0.;
      	     fPxomegaCside[i] = fPyomegaCside[i] = fPzomegaCside[i] = 0.;
	   }
	 }
       }	
    }
    reader.Copy(*this);
}
  // -----------------------------------------------------------------------------------
AliGenReaderEMD::~AliGenReaderEMD()
{
    delete fTreeNtuple;
}

// -----------------------------------------------------------------------------------
AliGenReaderEMD& AliGenReaderEMD::operator=(const  AliGenReaderEMD& rhs)
{
// Assignment operator
    rhs.Copy(*this);
    return *this;
}

// -----------------------------------------------------------------------------------
void AliGenReaderEMD::Copy(TObject&) const
{
    //
    // Copy 
    //
    Fatal("Copy","Not implemented!\n");
}

// -----------------------------------------------------------------------------------
void AliGenReaderEMD::Init() 
{
//
// Reset the existing file environment and open a new root file
    
    TFile *pFile=0;
    if (!pFile) {
	pFile = new TFile(fFileName);
	pFile->cd();
	printf("\n %s file opened to read RELDIS EMD events\n\n", fFileName);
    }
    fTreeNtuple = (TTree*)gDirectory->Get("h2032");
    fNcurrent = fStartEvent;

    TTree *Ntu=fTreeNtuple;
    //
    // Set branch addresses
    // **** neutrons
    Ntu->SetBranchAddress("Nleft",&fNnAside);
    Ntu->SetBranchAddress("Eleft",&fEnAside);
    Ntu->SetBranchAddress("Ipdg_l_n",&fnPDGCode);
    Ntu->SetBranchAddress("Pxl",  fPxnAside);
    Ntu->SetBranchAddress("Pyl",  fPynAside);
    Ntu->SetBranchAddress("Pzl",  fPznAside);
    Ntu->SetBranchAddress("Nright",&fNnCside);
    Ntu->SetBranchAddress("Eright",&fEnCside);
    Ntu->SetBranchAddress("Pxr",   fPxnCside);
    Ntu->SetBranchAddress("Pyr",   fPynCside);
    Ntu->SetBranchAddress("Pzr",   fPznCside);
    // **** protons
    Ntu->SetBranchAddress("Nleft_p",&fNpAside);
    Ntu->SetBranchAddress("Etaleft_p",&fEtapAside);
    Ntu->SetBranchAddress("Ipdg_l_p",&fpPDGCode);
    Ntu->SetBranchAddress("Pxl_p",  fPxpAside);
    Ntu->SetBranchAddress("Pyl_p",  fPypAside);
    Ntu->SetBranchAddress("Pzl_p",  fPzpAside);
    Ntu->SetBranchAddress("Nright_p",&fNpCside);
    Ntu->SetBranchAddress("Etaright_p",&fEtapCside);
    Ntu->SetBranchAddress("Pxr_p",   fPxpCside);
    Ntu->SetBranchAddress("Pyr_p",   fPypCside);
    Ntu->SetBranchAddress("Pzr_p",   fPzpCside);
    // **** pi+
    Ntu->SetBranchAddress("Nleft_pp",&fNppAside);
    Ntu->SetBranchAddress("Etaleft_pp",&fEtappAside);
    Ntu->SetBranchAddress("Ipdg_l_pp",&fppPDGCode);
    Ntu->SetBranchAddress("Pxl_pp",  fPxppAside);
    Ntu->SetBranchAddress("Pyl_pp",  fPyppAside);
    Ntu->SetBranchAddress("Pzl_pp",  fPzppAside);
    Ntu->SetBranchAddress("Nright_pp",&fNppCside);
    Ntu->SetBranchAddress("Etaright_pp",&fEtappCside);
    Ntu->SetBranchAddress("Pxr_pp",   fPxppCside);
    Ntu->SetBranchAddress("Pyr_pp",   fPyppCside);
    Ntu->SetBranchAddress("Pzr_pp",   fPzppCside);
    // **** pi-
    Ntu->SetBranchAddress("Nleft_pm",&fNpmAside);
    Ntu->SetBranchAddress("Etaleft_pm",&fEtapmAside);
    Ntu->SetBranchAddress("Ipdg_l_pm",&fpmPDGCode);
    Ntu->SetBranchAddress("Pxl_pm",  fPxpmAside);
    Ntu->SetBranchAddress("Pyl_pm",  fPypmAside);
    Ntu->SetBranchAddress("Pzl_pm",  fPzpmAside);
    Ntu->SetBranchAddress("Nright_pm",&fNpmCside);
    Ntu->SetBranchAddress("Etaright_pm",&fEtapmCside);
    Ntu->SetBranchAddress("Pxr_pm",   fPxpmCside);
    Ntu->SetBranchAddress("Pyr_pm",   fPypmCside);
    Ntu->SetBranchAddress("Pzr_pm",   fPzpmCside);
    // **** pi0
    Ntu->SetBranchAddress("Nleft_p0",&fNp0Aside);
    Ntu->SetBranchAddress("Etaleft_p0",&fEtap0Aside);
    Ntu->SetBranchAddress("Ipdg_l_p0",&fp0PDGCode);
    Ntu->SetBranchAddress("Pxl_p0",  fPxp0Aside);
    Ntu->SetBranchAddress("Pyl_p0",  fPyp0Aside);
    Ntu->SetBranchAddress("Pzl_p0",  fPzp0Aside);
    Ntu->SetBranchAddress("Nright_p0",&fNp0Cside);
    Ntu->SetBranchAddress("Etaright_p0",&fEtap0Cside);
    Ntu->SetBranchAddress("Pxr_p0",   fPxp0Cside);
    Ntu->SetBranchAddress("Pyr_p0",   fPyp0Cside);
    Ntu->SetBranchAddress("Pzr_p0",   fPzp0Cside);
    // **** eta
    Ntu->SetBranchAddress("Nleft_et",&fNetaAside);
    Ntu->SetBranchAddress("Etaleft_et",&fEtaetaAside);
    Ntu->SetBranchAddress("Ipdg_l_et",&fetaPDGCode);
    Ntu->SetBranchAddress("Pxl_et",  fPxetaAside);
    Ntu->SetBranchAddress("Pyl_et",  fPyetaAside);
    Ntu->SetBranchAddress("Pzl_et",  fPzetaAside);
    Ntu->SetBranchAddress("Nright_et",&fNetaCside);
    Ntu->SetBranchAddress("Etaright_et",&fEtaetaCside);
    Ntu->SetBranchAddress("Pxr_et",   fPxetaCside);
    Ntu->SetBranchAddress("Pyr_et",   fPyetaCside);
    Ntu->SetBranchAddress("Pzr_et",   fPzetaCside);
    // **** omega
    Ntu->SetBranchAddress("Nleft_om",&fNomegaAside);
    Ntu->SetBranchAddress("Etaleft_om",&fEtaomegaAside);
    Ntu->SetBranchAddress("Ipdg_l_om",&fomegaPDGCode);
    Ntu->SetBranchAddress("Pxl_om",  fPxomegaAside);
    Ntu->SetBranchAddress("Pyl_om",  fPyomegaAside);
    Ntu->SetBranchAddress("Pzl_om",  fPzomegaAside);
    Ntu->SetBranchAddress("Nright_om",&fNomegaCside);
    Ntu->SetBranchAddress("Etaright_om",&fEtaomegaCside);
    Ntu->SetBranchAddress("Pxr_om",   fPxomegaCside);
    Ntu->SetBranchAddress("Pyr_om",   fPyomegaCside);
    Ntu->SetBranchAddress("Pzr_om",   fPzomegaCside);
}

// -----------------------------------------------------------------------------------
Int_t AliGenReaderEMD::NextEvent() 
{
    // Read the next event  
    Int_t nTracks=0;
    fNparticle = 0; fOffset=0;
    
    TFile* pFile = fTreeNtuple->GetCurrentFile();
    pFile->cd();
    

    Int_t nentries = (Int_t) fTreeNtuple->GetEntries();
    if(fNcurrent < nentries) {
	fTreeNtuple->GetEvent(fNcurrent);
	if(fNcurrent%100 == 0) printf("\n *** Reading event %d ***\n",fNcurrent);
	//
	if(fPcToTrack==kAll || fPcToTrack==kOnlyNucleons){ // nucleons
	   nTracks = fNnCside+fNnAside+fNpCside+fNpAside;
	}
	if(fPcToTrack==kAll || fPcToTrack==kNotNucleons){ //pions,eta,omega
	    nTracks += fNppCside+fNpmCside+fNppAside+fNpmAside+fNp0Aside+fNp0Cside+
	    	fNetaAside+fNetaCside+fNomegaAside+fNomegaCside;
	}
	fNcurrent++;
	printf("\t #### Putting %d particles in the stack\n", nTracks);
	/*if(fPcToTrack==kAll || fPcToTrack==kOnlyNucleons) printf("\t\t  %d+%d neutrons, %d+%d protons\n", 
		fNnAside,fNnCside, fNpAside,fNpCside);
	if(fPcToTrack==kAll || fPcToTrack==kNotNucleons) printf("\t %d+%d pi+, %d+%d pi-, %d+%d pi0, %d+%d eta, %d+%d omega\n",
	        fNppAside,fNppCside,fNpmAside,fNpmCside, 
		fNp0Aside,fNp0Cside,fNetaAside,fNetaCside, fNomegaAside,fNomegaCside);*/
	return nTracks;
    }

    return 0;
}

// -----------------------------------------------------------------------------------
TParticle* AliGenReaderEMD::NextParticle() 
{
    // Read the next particle
    Float_t p[4]={0.,0.,0.,0.};
    int pdgCode=0;
    
    if(fPcToTrack==kAll || fPcToTrack==kOnlyNucleons){//***********************************************
      if(fNparticle<fNnAside){
        p[0] = fPxnAside[fNparticle];
        p[1] = fPynAside[fNparticle];
        p[2] = fPznAside[fNparticle];  
	pdgCode = fnPDGCode;
//    printf(" pc%d n sideA: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      else if(fNparticle>=fNnAside && fNparticle<(fNnAside+fNnCside)){
        p[0] = fPxnCside[fNparticle];
        p[1] = fPynCside[fNparticle];
        p[2] = fPznCside[fNparticle];
	pdgCode = fnPDGCode;
//    printf(" pc%d n sideC: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      else if(fNparticle>=fNnAside+fNnCside && fNparticle<(fNnAside+fNnCside+fNpAside)){
        p[0] = fPxpAside[fNparticle];
        p[1] = fPypAside[fNparticle];
        p[2] = fPzpAside[fNparticle];
	pdgCode = fpPDGCode;
//    printf(" pc%d p sideA: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      else if(fNparticle>=fNnAside+fNnCside+fNpAside && fNparticle<(fNnAside+fNnCside+fNpCside+fNpAside)){
        p[0] = fPxpCside[fNparticle];
        p[1] = fPypCside[fNparticle];
        p[2] = fPzpCside[fNparticle];
	pdgCode = fpPDGCode;
//    printf(" pc%d p sideC: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      fOffset = fNnAside+fNnCside+fNpCside+fNpAside;
    } //**********************************************************************************************
    if(fPcToTrack==kAll || fPcToTrack==kNotNucleons){
      if(fNparticle>=fOffset && fNparticle<fOffset+fNppAside){ // *** pi +
        p[0] = fPxppAside[fNparticle];
        p[1] = fPyppAside[fNparticle];
        p[2] = fPzppAside[fNparticle];  
	pdgCode = fppPDGCode;
//    printf(" pc%d pi+ sideA: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside && fNparticle<fOffset+fNppAside+fNppCside){
        p[0] = fPxppCside[fNparticle];
        p[1] = fPyppCside[fNparticle];
        p[2] = fPzppCside[fNparticle];
	pdgCode = fppPDGCode;
//    printf(" pc%d pi+ sideC: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside && fNparticle<fOffset+fNppAside+fNppCside+fNpmAside){ // *** pi -
        p[0] = fPxpmAside[fNparticle];
        p[1] = fPypmAside[fNparticle];
        p[2] = fPzpmAside[fNparticle];
	pdgCode = fpmPDGCode;
//    printf(" pc%d pi- sideA: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside+fNpmAside && fNparticle<fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside){
        p[0] = fPxpmCside[fNparticle];
        p[1] = fPypmCside[fNparticle];
        p[2] = fPzpmCside[fNparticle];
	pdgCode = fpmPDGCode;
//    printf(" pc%d pi- sideC: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside && 
         fNparticle<fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside){ // *** pi 0
        p[0] = fPxp0Aside[fNparticle];
        p[1] = fPyp0Aside[fNparticle];
        p[2] = fPzp0Aside[fNparticle];
	pdgCode = fp0PDGCode;
//    printf(" pc%d pi0 sideA: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside && 
        fNparticle<fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside){
        p[0] = fPxp0Cside[fNparticle];
        p[1] = fPyp0Cside[fNparticle];
        p[2] = fPzp0Cside[fNparticle];
	pdgCode = fp0PDGCode;
//    printf(" pc%d pi0 sideC: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside && 
         fNparticle<fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside+fNetaAside){ // *** eta
        p[0] = fPxetaAside[fNparticle];
        p[1] = fPyetaAside[fNparticle];
        p[2] = fPzetaAside[fNparticle];
	pdgCode = fetaPDGCode;
//    printf(" pc%d eta sideA: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside+fNetaAside && 
         fNparticle<fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside+fNetaAside+fNetaCside){
        p[0] = fPxetaCside[fNparticle];
        p[1] = fPyetaCside[fNparticle];
        p[2] = fPzetaCside[fNparticle];
	pdgCode = fetaPDGCode;
//    printf(" pc%d eta sideC: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside+fNetaAside+fNetaCside && 
         fNparticle<fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside+fNetaAside+fNetaCside+fNomegaAside){ // *** omega
        p[0] = fPxomegaAside[fNparticle];
        p[1] = fPyomegaAside[fNparticle];
        p[2] = fPzomegaAside[fNparticle];
	pdgCode = fomegaPDGCode;
//    printf(" pc%d omega sideA: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      if(fNparticle>=fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside+fNetaAside+fNetaCside+fNomegaAside
      && fNparticle<fOffset+fNppAside+fNppCside+fNpmAside+fNpmCside+fNp0Aside+fNp0Cside+fNetaAside+fNetaCside+fNomegaAside+fNomegaCside){
        p[0] = fPxomegaCside[fNparticle];
        p[1] = fPyomegaCside[fNparticle];
        p[2] = fPzomegaCside[fNparticle];
	pdgCode = fomegaPDGCode;
//    printf(" pc%d omega sideC: PDG code %d,  momentum (%f, %f, %f) \n", fNparticle, pdgCode, p[0],p[1],p[2]);
      }
      
    } 
   
    Float_t ptot = TMath::Sqrt(p[0]*p[0]+p[1]*p[1]+p[2]*p[2]);
    Double_t amass = TDatabasePDG::Instance()->GetParticle(pdgCode)->Mass();
    p[3] = TMath::Sqrt(ptot*ptot+amass*amass);
    
    if(p[3]<=amass){ 
       Warning("Generate","Particle %d  E = %f GeV mass = %f GeV ",pdgCode,p[3],amass);
    }
    
    //printf("  Pc %d:  PDGcode %d  p(%1.2f, %1.2f, %1.2f, %1.3f)\n",
    //	fNparticle,pdgCode,p[0], p[1], p[2], p[3]);
    
    TParticle* particle = new TParticle(pdgCode, 0, -1, -1, -1, -1, 
    	p[0], p[1], p[2], p[3], 0., 0., 0., 0.);
    if((p[0]*p[0]+p[1]*p[1]+p[2]*p[2])>1e-5) particle->SetBit(kTransportBit);
    fNparticle++;
    return particle;
}
 AliGenReaderEMD.cxx:1
 AliGenReaderEMD.cxx:2
 AliGenReaderEMD.cxx:3
 AliGenReaderEMD.cxx:4
 AliGenReaderEMD.cxx:5
 AliGenReaderEMD.cxx:6
 AliGenReaderEMD.cxx:7
 AliGenReaderEMD.cxx:8
 AliGenReaderEMD.cxx:9
 AliGenReaderEMD.cxx:10
 AliGenReaderEMD.cxx:11
 AliGenReaderEMD.cxx:12
 AliGenReaderEMD.cxx:13
 AliGenReaderEMD.cxx:14
 AliGenReaderEMD.cxx:15
 AliGenReaderEMD.cxx:16
 AliGenReaderEMD.cxx:17
 AliGenReaderEMD.cxx:18
 AliGenReaderEMD.cxx:19
 AliGenReaderEMD.cxx:20
 AliGenReaderEMD.cxx:21
 AliGenReaderEMD.cxx:22
 AliGenReaderEMD.cxx:23
 AliGenReaderEMD.cxx:24
 AliGenReaderEMD.cxx:25
 AliGenReaderEMD.cxx:26
 AliGenReaderEMD.cxx:27
 AliGenReaderEMD.cxx:28
 AliGenReaderEMD.cxx:29
 AliGenReaderEMD.cxx:30
 AliGenReaderEMD.cxx:31
 AliGenReaderEMD.cxx:32
 AliGenReaderEMD.cxx:33
 AliGenReaderEMD.cxx:34
 AliGenReaderEMD.cxx:35
 AliGenReaderEMD.cxx:36
 AliGenReaderEMD.cxx:37
 AliGenReaderEMD.cxx:38
 AliGenReaderEMD.cxx:39
 AliGenReaderEMD.cxx:40
 AliGenReaderEMD.cxx:41
 AliGenReaderEMD.cxx:42
 AliGenReaderEMD.cxx:43
 AliGenReaderEMD.cxx:44
 AliGenReaderEMD.cxx:45
 AliGenReaderEMD.cxx:46
 AliGenReaderEMD.cxx:47
 AliGenReaderEMD.cxx:48
 AliGenReaderEMD.cxx:49
 AliGenReaderEMD.cxx:50
 AliGenReaderEMD.cxx:51
 AliGenReaderEMD.cxx:52
 AliGenReaderEMD.cxx:53
 AliGenReaderEMD.cxx:54
 AliGenReaderEMD.cxx:55
 AliGenReaderEMD.cxx:56
 AliGenReaderEMD.cxx:57
 AliGenReaderEMD.cxx:58
 AliGenReaderEMD.cxx:59
 AliGenReaderEMD.cxx:60
 AliGenReaderEMD.cxx:61
 AliGenReaderEMD.cxx:62
 AliGenReaderEMD.cxx:63
 AliGenReaderEMD.cxx:64
 AliGenReaderEMD.cxx:65
 AliGenReaderEMD.cxx:66
 AliGenReaderEMD.cxx:67
 AliGenReaderEMD.cxx:68
 AliGenReaderEMD.cxx:69
 AliGenReaderEMD.cxx:70
 AliGenReaderEMD.cxx:71
 AliGenReaderEMD.cxx:72
 AliGenReaderEMD.cxx:73
 AliGenReaderEMD.cxx:74
 AliGenReaderEMD.cxx:75
 AliGenReaderEMD.cxx:76
 AliGenReaderEMD.cxx:77
 AliGenReaderEMD.cxx:78
 AliGenReaderEMD.cxx:79
 AliGenReaderEMD.cxx:80
 AliGenReaderEMD.cxx:81
 AliGenReaderEMD.cxx:82
 AliGenReaderEMD.cxx:83
 AliGenReaderEMD.cxx:84
 AliGenReaderEMD.cxx:85
 AliGenReaderEMD.cxx:86
 AliGenReaderEMD.cxx:87
 AliGenReaderEMD.cxx:88
 AliGenReaderEMD.cxx:89
 AliGenReaderEMD.cxx:90
 AliGenReaderEMD.cxx:91
 AliGenReaderEMD.cxx:92
 AliGenReaderEMD.cxx:93
 AliGenReaderEMD.cxx:94
 AliGenReaderEMD.cxx:95
 AliGenReaderEMD.cxx:96
 AliGenReaderEMD.cxx:97
 AliGenReaderEMD.cxx:98
 AliGenReaderEMD.cxx:99
 AliGenReaderEMD.cxx:100
 AliGenReaderEMD.cxx:101
 AliGenReaderEMD.cxx:102
 AliGenReaderEMD.cxx:103
 AliGenReaderEMD.cxx:104
 AliGenReaderEMD.cxx:105
 AliGenReaderEMD.cxx:106
 AliGenReaderEMD.cxx:107
 AliGenReaderEMD.cxx:108
 AliGenReaderEMD.cxx:109
 AliGenReaderEMD.cxx:110
 AliGenReaderEMD.cxx:111
 AliGenReaderEMD.cxx:112
 AliGenReaderEMD.cxx:113
 AliGenReaderEMD.cxx:114
 AliGenReaderEMD.cxx:115
 AliGenReaderEMD.cxx:116
 AliGenReaderEMD.cxx:117
 AliGenReaderEMD.cxx:118
 AliGenReaderEMD.cxx:119
 AliGenReaderEMD.cxx:120
 AliGenReaderEMD.cxx:121
 AliGenReaderEMD.cxx:122
 AliGenReaderEMD.cxx:123
 AliGenReaderEMD.cxx:124
 AliGenReaderEMD.cxx:125
 AliGenReaderEMD.cxx:126
 AliGenReaderEMD.cxx:127
 AliGenReaderEMD.cxx:128
 AliGenReaderEMD.cxx:129
 AliGenReaderEMD.cxx:130
 AliGenReaderEMD.cxx:131
 AliGenReaderEMD.cxx:132
 AliGenReaderEMD.cxx:133
 AliGenReaderEMD.cxx:134
 AliGenReaderEMD.cxx:135
 AliGenReaderEMD.cxx:136
 AliGenReaderEMD.cxx:137
 AliGenReaderEMD.cxx:138
 AliGenReaderEMD.cxx:139
 AliGenReaderEMD.cxx:140
 AliGenReaderEMD.cxx:141
 AliGenReaderEMD.cxx:142
 AliGenReaderEMD.cxx:143
 AliGenReaderEMD.cxx:144
 AliGenReaderEMD.cxx:145
 AliGenReaderEMD.cxx:146
 AliGenReaderEMD.cxx:147
 AliGenReaderEMD.cxx:148
 AliGenReaderEMD.cxx:149
 AliGenReaderEMD.cxx:150
 AliGenReaderEMD.cxx:151
 AliGenReaderEMD.cxx:152
 AliGenReaderEMD.cxx:153
 AliGenReaderEMD.cxx:154
 AliGenReaderEMD.cxx:155
 AliGenReaderEMD.cxx:156
 AliGenReaderEMD.cxx:157
 AliGenReaderEMD.cxx:158
 AliGenReaderEMD.cxx:159
 AliGenReaderEMD.cxx:160
 AliGenReaderEMD.cxx:161
 AliGenReaderEMD.cxx:162
 AliGenReaderEMD.cxx:163
 AliGenReaderEMD.cxx:164
 AliGenReaderEMD.cxx:165
 AliGenReaderEMD.cxx:166
 AliGenReaderEMD.cxx:167
 AliGenReaderEMD.cxx:168
 AliGenReaderEMD.cxx:169
 AliGenReaderEMD.cxx:170
 AliGenReaderEMD.cxx:171
 AliGenReaderEMD.cxx:172
 AliGenReaderEMD.cxx:173
 AliGenReaderEMD.cxx:174
 AliGenReaderEMD.cxx:175
 AliGenReaderEMD.cxx:176
 AliGenReaderEMD.cxx:177
 AliGenReaderEMD.cxx:178
 AliGenReaderEMD.cxx:179
 AliGenReaderEMD.cxx:180
 AliGenReaderEMD.cxx:181
 AliGenReaderEMD.cxx:182
 AliGenReaderEMD.cxx:183
 AliGenReaderEMD.cxx:184
 AliGenReaderEMD.cxx:185
 AliGenReaderEMD.cxx:186
 AliGenReaderEMD.cxx:187
 AliGenReaderEMD.cxx:188
 AliGenReaderEMD.cxx:189
 AliGenReaderEMD.cxx:190
 AliGenReaderEMD.cxx:191
 AliGenReaderEMD.cxx:192
 AliGenReaderEMD.cxx:193
 AliGenReaderEMD.cxx:194
 AliGenReaderEMD.cxx:195
 AliGenReaderEMD.cxx:196
 AliGenReaderEMD.cxx:197
 AliGenReaderEMD.cxx:198
 AliGenReaderEMD.cxx:199
 AliGenReaderEMD.cxx:200
 AliGenReaderEMD.cxx:201
 AliGenReaderEMD.cxx:202
 AliGenReaderEMD.cxx:203
 AliGenReaderEMD.cxx:204
 AliGenReaderEMD.cxx:205
 AliGenReaderEMD.cxx:206
 AliGenReaderEMD.cxx:207
 AliGenReaderEMD.cxx:208
 AliGenReaderEMD.cxx:209
 AliGenReaderEMD.cxx:210
 AliGenReaderEMD.cxx:211
 AliGenReaderEMD.cxx:212
 AliGenReaderEMD.cxx:213
 AliGenReaderEMD.cxx:214
 AliGenReaderEMD.cxx:215
 AliGenReaderEMD.cxx:216
 AliGenReaderEMD.cxx:217
 AliGenReaderEMD.cxx:218
 AliGenReaderEMD.cxx:219
 AliGenReaderEMD.cxx:220
 AliGenReaderEMD.cxx:221
 AliGenReaderEMD.cxx:222
 AliGenReaderEMD.cxx:223
 AliGenReaderEMD.cxx:224
 AliGenReaderEMD.cxx:225
 AliGenReaderEMD.cxx:226
 AliGenReaderEMD.cxx:227
 AliGenReaderEMD.cxx:228
 AliGenReaderEMD.cxx:229
 AliGenReaderEMD.cxx:230
 AliGenReaderEMD.cxx:231
 AliGenReaderEMD.cxx:232
 AliGenReaderEMD.cxx:233
 AliGenReaderEMD.cxx:234
 AliGenReaderEMD.cxx:235
 AliGenReaderEMD.cxx:236
 AliGenReaderEMD.cxx:237
 AliGenReaderEMD.cxx:238
 AliGenReaderEMD.cxx:239
 AliGenReaderEMD.cxx:240
 AliGenReaderEMD.cxx:241
 AliGenReaderEMD.cxx:242
 AliGenReaderEMD.cxx:243
 AliGenReaderEMD.cxx:244
 AliGenReaderEMD.cxx:245
 AliGenReaderEMD.cxx:246
 AliGenReaderEMD.cxx:247
 AliGenReaderEMD.cxx:248
 AliGenReaderEMD.cxx:249
 AliGenReaderEMD.cxx:250
 AliGenReaderEMD.cxx:251
 AliGenReaderEMD.cxx:252
 AliGenReaderEMD.cxx:253
 AliGenReaderEMD.cxx:254
 AliGenReaderEMD.cxx:255
 AliGenReaderEMD.cxx:256
 AliGenReaderEMD.cxx:257
 AliGenReaderEMD.cxx:258
 AliGenReaderEMD.cxx:259
 AliGenReaderEMD.cxx:260
 AliGenReaderEMD.cxx:261
 AliGenReaderEMD.cxx:262
 AliGenReaderEMD.cxx:263
 AliGenReaderEMD.cxx:264
 AliGenReaderEMD.cxx:265
 AliGenReaderEMD.cxx:266
 AliGenReaderEMD.cxx:267
 AliGenReaderEMD.cxx:268
 AliGenReaderEMD.cxx:269
 AliGenReaderEMD.cxx:270
 AliGenReaderEMD.cxx:271
 AliGenReaderEMD.cxx:272
 AliGenReaderEMD.cxx:273
 AliGenReaderEMD.cxx:274
 AliGenReaderEMD.cxx:275
 AliGenReaderEMD.cxx:276
 AliGenReaderEMD.cxx:277
 AliGenReaderEMD.cxx:278
 AliGenReaderEMD.cxx:279
 AliGenReaderEMD.cxx:280
 AliGenReaderEMD.cxx:281
 AliGenReaderEMD.cxx:282
 AliGenReaderEMD.cxx:283
 AliGenReaderEMD.cxx:284
 AliGenReaderEMD.cxx:285
 AliGenReaderEMD.cxx:286
 AliGenReaderEMD.cxx:287
 AliGenReaderEMD.cxx:288
 AliGenReaderEMD.cxx:289
 AliGenReaderEMD.cxx:290
 AliGenReaderEMD.cxx:291
 AliGenReaderEMD.cxx:292
 AliGenReaderEMD.cxx:293
 AliGenReaderEMD.cxx:294
 AliGenReaderEMD.cxx:295
 AliGenReaderEMD.cxx:296
 AliGenReaderEMD.cxx:297
 AliGenReaderEMD.cxx:298
 AliGenReaderEMD.cxx:299
 AliGenReaderEMD.cxx:300
 AliGenReaderEMD.cxx:301
 AliGenReaderEMD.cxx:302
 AliGenReaderEMD.cxx:303
 AliGenReaderEMD.cxx:304
 AliGenReaderEMD.cxx:305
 AliGenReaderEMD.cxx:306
 AliGenReaderEMD.cxx:307
 AliGenReaderEMD.cxx:308
 AliGenReaderEMD.cxx:309
 AliGenReaderEMD.cxx:310
 AliGenReaderEMD.cxx:311
 AliGenReaderEMD.cxx:312
 AliGenReaderEMD.cxx:313
 AliGenReaderEMD.cxx:314
 AliGenReaderEMD.cxx:315
 AliGenReaderEMD.cxx:316
 AliGenReaderEMD.cxx:317
 AliGenReaderEMD.cxx:318
 AliGenReaderEMD.cxx:319
 AliGenReaderEMD.cxx:320
 AliGenReaderEMD.cxx:321
 AliGenReaderEMD.cxx:322
 AliGenReaderEMD.cxx:323
 AliGenReaderEMD.cxx:324
 AliGenReaderEMD.cxx:325
 AliGenReaderEMD.cxx:326
 AliGenReaderEMD.cxx:327
 AliGenReaderEMD.cxx:328
 AliGenReaderEMD.cxx:329
 AliGenReaderEMD.cxx:330
 AliGenReaderEMD.cxx:331
 AliGenReaderEMD.cxx:332
 AliGenReaderEMD.cxx:333
 AliGenReaderEMD.cxx:334
 AliGenReaderEMD.cxx:335
 AliGenReaderEMD.cxx:336
 AliGenReaderEMD.cxx:337
 AliGenReaderEMD.cxx:338
 AliGenReaderEMD.cxx:339
 AliGenReaderEMD.cxx:340
 AliGenReaderEMD.cxx:341
 AliGenReaderEMD.cxx:342
 AliGenReaderEMD.cxx:343
 AliGenReaderEMD.cxx:344
 AliGenReaderEMD.cxx:345
 AliGenReaderEMD.cxx:346
 AliGenReaderEMD.cxx:347
 AliGenReaderEMD.cxx:348
 AliGenReaderEMD.cxx:349
 AliGenReaderEMD.cxx:350
 AliGenReaderEMD.cxx:351
 AliGenReaderEMD.cxx:352
 AliGenReaderEMD.cxx:353
 AliGenReaderEMD.cxx:354
 AliGenReaderEMD.cxx:355
 AliGenReaderEMD.cxx:356
 AliGenReaderEMD.cxx:357
 AliGenReaderEMD.cxx:358
 AliGenReaderEMD.cxx:359
 AliGenReaderEMD.cxx:360
 AliGenReaderEMD.cxx:361
 AliGenReaderEMD.cxx:362
 AliGenReaderEMD.cxx:363
 AliGenReaderEMD.cxx:364
 AliGenReaderEMD.cxx:365
 AliGenReaderEMD.cxx:366
 AliGenReaderEMD.cxx:367
 AliGenReaderEMD.cxx:368
 AliGenReaderEMD.cxx:369
 AliGenReaderEMD.cxx:370
 AliGenReaderEMD.cxx:371
 AliGenReaderEMD.cxx:372
 AliGenReaderEMD.cxx:373
 AliGenReaderEMD.cxx:374
 AliGenReaderEMD.cxx:375
 AliGenReaderEMD.cxx:376
 AliGenReaderEMD.cxx:377
 AliGenReaderEMD.cxx:378
 AliGenReaderEMD.cxx:379
 AliGenReaderEMD.cxx:380
 AliGenReaderEMD.cxx:381
 AliGenReaderEMD.cxx:382
 AliGenReaderEMD.cxx:383
 AliGenReaderEMD.cxx:384
 AliGenReaderEMD.cxx:385
 AliGenReaderEMD.cxx:386
 AliGenReaderEMD.cxx:387
 AliGenReaderEMD.cxx:388
 AliGenReaderEMD.cxx:389
 AliGenReaderEMD.cxx:390
 AliGenReaderEMD.cxx:391
 AliGenReaderEMD.cxx:392
 AliGenReaderEMD.cxx:393
 AliGenReaderEMD.cxx:394
 AliGenReaderEMD.cxx:395
 AliGenReaderEMD.cxx:396
 AliGenReaderEMD.cxx:397
 AliGenReaderEMD.cxx:398
 AliGenReaderEMD.cxx:399
 AliGenReaderEMD.cxx:400
 AliGenReaderEMD.cxx:401
 AliGenReaderEMD.cxx:402
 AliGenReaderEMD.cxx:403
 AliGenReaderEMD.cxx:404
 AliGenReaderEMD.cxx:405
 AliGenReaderEMD.cxx:406
 AliGenReaderEMD.cxx:407
 AliGenReaderEMD.cxx:408
 AliGenReaderEMD.cxx:409
 AliGenReaderEMD.cxx:410
 AliGenReaderEMD.cxx:411
 AliGenReaderEMD.cxx:412
 AliGenReaderEMD.cxx:413
 AliGenReaderEMD.cxx:414
 AliGenReaderEMD.cxx:415
 AliGenReaderEMD.cxx:416
 AliGenReaderEMD.cxx:417
 AliGenReaderEMD.cxx:418
 AliGenReaderEMD.cxx:419
 AliGenReaderEMD.cxx:420
 AliGenReaderEMD.cxx:421
 AliGenReaderEMD.cxx:422
 AliGenReaderEMD.cxx:423
 AliGenReaderEMD.cxx:424
 AliGenReaderEMD.cxx:425
 AliGenReaderEMD.cxx:426
 AliGenReaderEMD.cxx:427
 AliGenReaderEMD.cxx:428
 AliGenReaderEMD.cxx:429
 AliGenReaderEMD.cxx:430
 AliGenReaderEMD.cxx:431
 AliGenReaderEMD.cxx:432
 AliGenReaderEMD.cxx:433
 AliGenReaderEMD.cxx:434
 AliGenReaderEMD.cxx:435
 AliGenReaderEMD.cxx:436
 AliGenReaderEMD.cxx:437
 AliGenReaderEMD.cxx:438
 AliGenReaderEMD.cxx:439
 AliGenReaderEMD.cxx:440
 AliGenReaderEMD.cxx:441
 AliGenReaderEMD.cxx:442
 AliGenReaderEMD.cxx:443
 AliGenReaderEMD.cxx:444
 AliGenReaderEMD.cxx:445
 AliGenReaderEMD.cxx:446
 AliGenReaderEMD.cxx:447
 AliGenReaderEMD.cxx:448
 AliGenReaderEMD.cxx:449
 AliGenReaderEMD.cxx:450
 AliGenReaderEMD.cxx:451
 AliGenReaderEMD.cxx:452
 AliGenReaderEMD.cxx:453
 AliGenReaderEMD.cxx:454
 AliGenReaderEMD.cxx:455
 AliGenReaderEMD.cxx:456
 AliGenReaderEMD.cxx:457
 AliGenReaderEMD.cxx:458
 AliGenReaderEMD.cxx:459
 AliGenReaderEMD.cxx:460
 AliGenReaderEMD.cxx:461
 AliGenReaderEMD.cxx:462
 AliGenReaderEMD.cxx:463
 AliGenReaderEMD.cxx:464
 AliGenReaderEMD.cxx:465
 AliGenReaderEMD.cxx:466
 AliGenReaderEMD.cxx:467
 AliGenReaderEMD.cxx:468
 AliGenReaderEMD.cxx:469
 AliGenReaderEMD.cxx:470
 AliGenReaderEMD.cxx:471