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.                  *
 **************************************************************************/

/* $Id$ */
//
// Realisations of the AliGenReader interface to be used with AliGenExFile.
// NextEvent() loops over events 
// and NextParticle() loops over particles. 
// This implementation reads various StarLight output formats 
// Author: andreas.morsch@cern.ch

#include <TVirtualMC.h> 
#include <TDatabasePDG.h>
#include <TParticle.h>

#include "AliLog.h"
#include "AliGenReaderSL.h"
#include "AliRun.h"
#include "AliStack.h"


ClassImp(AliGenReaderSL)


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

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

void AliGenReaderSL::Init()
{
    // Initialisation
    if( !(fFile = fopen(fFileName,"r")) ) {
	printf("Couldn't open input file: %s \n", fFileName);
    } else {
	printf("File %s opened \n", fFileName);
    }
    
    
}

Int_t AliGenReaderSL::NextEvent()
{
// Read the next event

    if (fFormat == 0) {
	fNParticles = 4;
	return (fNParticles);
    }
    
// Example 
// EVENT: 7 23 1
// GAMMAENERGIES: 27.6431
// VERTEX: 0 0 0 0 1 0 0 23
    char linelabel[20];
    int i1 = 0;
    int i2 = 0;
    int i3 = 0;


    double x1 = 0.0;
    double x2 = 0.0;
    double x3 = 0.0;
    double x4 = 0.0;

    int ntrk = 0;
    int nvtx = 0;
    //
    Float_t eGamma1, eGamma2; 
    eGamma2 = 0.;
    Int_t nb;
    // Event line 
    nb = fscanf(fFile,"%6s %d %d %d ",linelabel, &i1, &ntrk, &i2);
    if (nb <= 0) return (0);
    if (nb != 4) AliFatal("malformed EVENT line");
    fNParticles = ntrk;
    //printf("Event line: %s i1 = %5d ntrk = %5d i2 = %5d \n", linelabel, i1, ntrk, i2);

    // Gamma line
    if (fFormat == 1) {
	nb = fscanf(fFile, "%14s %f  ",linelabel, &eGamma1);
	if (nb <= 0) return (0);
	if (nb != 2) AliFatal("malformed GAMMA1 line");
    } else if (fFormat == 2) {
	nb = fscanf(fFile, "%14s %f %f ",linelabel, &eGamma1, &eGamma2); 
	if (nb <= 0) return (0);
	if (nb != 3) AliFatal("malformed GAMMA1,GAMMA2 line");
    }
//    printf("Gamma line: %s Egamma1 = %13.3f Egamma2 = %13.3f \n", linelabel, eGamma1, eGamma2); 

    // Vertex line 
    nb = fscanf(fFile, "%7s %lf %lf %lf %lf %d %d %d %d",
	   linelabel, &x1, &x2, &x3, &x4, &i1, &i2, &i3, &nvtx);
//    printf("Vertex line: %s (x = %13.3f, y =  %13.3f, z =  %13.3f, t =  %13.3f) i1 = %5d i2 = %5d i3 = %5d nvtx = %5d \n", 
//	   linelabel, x1, x2, x3, x4, i1, i2, i3, nvtx);
    if (nb <= 0) return (0);
    if (nb != 9) AliFatal("malformed VERTEX line");
    if(ntrk != nvtx) printf("ERROR: ntrk = %5d  nvtx = %5d \n", ntrk, nvtx);
    
    return (fNParticles);
    
}

TParticle* AliGenReaderSL::NextParticle()
{
    // Read next particle

    Float_t px, py, pz;
    Int_t pdg;
    static TParticle particle;
    Int_t nb;
    if (fFormat == 0) {
	Int_t ievent;
	Int_t ipart;
	nb = fscanf(fFile, "%d %d %d %f %f %f ", &ievent, &ipart, &pdg, &px, &py, &pz); 
	if (nb <= 0) return NULL;
	if (nb != 6) AliFatal("malformed TRACK line");
//	printf("%5d %5d %5d %13.3f %13.3f %13.3f \n", ievent, ipart, pdg, px, py, pz);
	
	if (pdg == 8) pdg =  211;
	if (pdg == 9) pdg = -211;

    } else {
	char tracklabel[20];
	int i1 = 0;
	int i2 = 0;
	int i3 = 0;
	int i4 = 0;
	nb = fscanf(fFile,"%6s %d %f %f %f %d %d %d %d",
	       tracklabel, &i1, &px, &py, &pz, &i2, &i3, &i4, &pdg);
	if (nb <= 0) return NULL;
	if (nb != 9) AliFatal("malformed TRACK line");
//	printf("Particle %5d %13.3f %13.3f %13.3f \n",  pdg, px, py, pz);
    }

    const Double_t mass = TDatabasePDG::Instance()->GetParticle(pdg)->Mass();
    const Float_t e = TMath::Sqrt(px * px + py * py + pz * pz + mass * mass);
    particle.SetMomentum(px, py, pz, e);
    particle.SetPdgCode(pdg);
    particle.SetFirstMother(-1);
    particle.SetLastMother(-1);
    particle.SetBit(kTransportBit);
    return &particle;
}

void AliGenReaderSL::RewindEvent()
{
  AliFatal("AliGenReaderSL::RewindEvent() is not implemented");
//    fFile->Rewind();
}
 AliGenReaderSL.cxx:1
 AliGenReaderSL.cxx:2
 AliGenReaderSL.cxx:3
 AliGenReaderSL.cxx:4
 AliGenReaderSL.cxx:5
 AliGenReaderSL.cxx:6
 AliGenReaderSL.cxx:7
 AliGenReaderSL.cxx:8
 AliGenReaderSL.cxx:9
 AliGenReaderSL.cxx:10
 AliGenReaderSL.cxx:11
 AliGenReaderSL.cxx:12
 AliGenReaderSL.cxx:13
 AliGenReaderSL.cxx:14
 AliGenReaderSL.cxx:15
 AliGenReaderSL.cxx:16
 AliGenReaderSL.cxx:17
 AliGenReaderSL.cxx:18
 AliGenReaderSL.cxx:19
 AliGenReaderSL.cxx:20
 AliGenReaderSL.cxx:21
 AliGenReaderSL.cxx:22
 AliGenReaderSL.cxx:23
 AliGenReaderSL.cxx:24
 AliGenReaderSL.cxx:25
 AliGenReaderSL.cxx:26
 AliGenReaderSL.cxx:27
 AliGenReaderSL.cxx:28
 AliGenReaderSL.cxx:29
 AliGenReaderSL.cxx:30
 AliGenReaderSL.cxx:31
 AliGenReaderSL.cxx:32
 AliGenReaderSL.cxx:33
 AliGenReaderSL.cxx:34
 AliGenReaderSL.cxx:35
 AliGenReaderSL.cxx:36
 AliGenReaderSL.cxx:37
 AliGenReaderSL.cxx:38
 AliGenReaderSL.cxx:39
 AliGenReaderSL.cxx:40
 AliGenReaderSL.cxx:41
 AliGenReaderSL.cxx:42
 AliGenReaderSL.cxx:43
 AliGenReaderSL.cxx:44
 AliGenReaderSL.cxx:45
 AliGenReaderSL.cxx:46
 AliGenReaderSL.cxx:47
 AliGenReaderSL.cxx:48
 AliGenReaderSL.cxx:49
 AliGenReaderSL.cxx:50
 AliGenReaderSL.cxx:51
 AliGenReaderSL.cxx:52
 AliGenReaderSL.cxx:53
 AliGenReaderSL.cxx:54
 AliGenReaderSL.cxx:55
 AliGenReaderSL.cxx:56
 AliGenReaderSL.cxx:57
 AliGenReaderSL.cxx:58
 AliGenReaderSL.cxx:59
 AliGenReaderSL.cxx:60
 AliGenReaderSL.cxx:61
 AliGenReaderSL.cxx:62
 AliGenReaderSL.cxx:63
 AliGenReaderSL.cxx:64
 AliGenReaderSL.cxx:65
 AliGenReaderSL.cxx:66
 AliGenReaderSL.cxx:67
 AliGenReaderSL.cxx:68
 AliGenReaderSL.cxx:69
 AliGenReaderSL.cxx:70
 AliGenReaderSL.cxx:71
 AliGenReaderSL.cxx:72
 AliGenReaderSL.cxx:73
 AliGenReaderSL.cxx:74
 AliGenReaderSL.cxx:75
 AliGenReaderSL.cxx:76
 AliGenReaderSL.cxx:77
 AliGenReaderSL.cxx:78
 AliGenReaderSL.cxx:79
 AliGenReaderSL.cxx:80
 AliGenReaderSL.cxx:81
 AliGenReaderSL.cxx:82
 AliGenReaderSL.cxx:83
 AliGenReaderSL.cxx:84
 AliGenReaderSL.cxx:85
 AliGenReaderSL.cxx:86
 AliGenReaderSL.cxx:87
 AliGenReaderSL.cxx:88
 AliGenReaderSL.cxx:89
 AliGenReaderSL.cxx:90
 AliGenReaderSL.cxx:91
 AliGenReaderSL.cxx:92
 AliGenReaderSL.cxx:93
 AliGenReaderSL.cxx:94
 AliGenReaderSL.cxx:95
 AliGenReaderSL.cxx:96
 AliGenReaderSL.cxx:97
 AliGenReaderSL.cxx:98
 AliGenReaderSL.cxx:99
 AliGenReaderSL.cxx:100
 AliGenReaderSL.cxx:101
 AliGenReaderSL.cxx:102
 AliGenReaderSL.cxx:103
 AliGenReaderSL.cxx:104
 AliGenReaderSL.cxx:105
 AliGenReaderSL.cxx:106
 AliGenReaderSL.cxx:107
 AliGenReaderSL.cxx:108
 AliGenReaderSL.cxx:109
 AliGenReaderSL.cxx:110
 AliGenReaderSL.cxx:111
 AliGenReaderSL.cxx:112
 AliGenReaderSL.cxx:113
 AliGenReaderSL.cxx:114
 AliGenReaderSL.cxx:115
 AliGenReaderSL.cxx:116
 AliGenReaderSL.cxx:117
 AliGenReaderSL.cxx:118
 AliGenReaderSL.cxx:119
 AliGenReaderSL.cxx:120
 AliGenReaderSL.cxx:121
 AliGenReaderSL.cxx:122
 AliGenReaderSL.cxx:123
 AliGenReaderSL.cxx:124
 AliGenReaderSL.cxx:125
 AliGenReaderSL.cxx:126
 AliGenReaderSL.cxx:127
 AliGenReaderSL.cxx:128
 AliGenReaderSL.cxx:129
 AliGenReaderSL.cxx:130
 AliGenReaderSL.cxx:131
 AliGenReaderSL.cxx:132
 AliGenReaderSL.cxx:133
 AliGenReaderSL.cxx:134
 AliGenReaderSL.cxx:135
 AliGenReaderSL.cxx:136
 AliGenReaderSL.cxx:137
 AliGenReaderSL.cxx:138
 AliGenReaderSL.cxx:139
 AliGenReaderSL.cxx:140
 AliGenReaderSL.cxx:141
 AliGenReaderSL.cxx:142
 AliGenReaderSL.cxx:143
 AliGenReaderSL.cxx:144
 AliGenReaderSL.cxx:145
 AliGenReaderSL.cxx:146
 AliGenReaderSL.cxx:147
 AliGenReaderSL.cxx:148
 AliGenReaderSL.cxx:149
 AliGenReaderSL.cxx:150
 AliGenReaderSL.cxx:151
 AliGenReaderSL.cxx:152
 AliGenReaderSL.cxx:153
 AliGenReaderSL.cxx:154
 AliGenReaderSL.cxx:155
 AliGenReaderSL.cxx:156
 AliGenReaderSL.cxx:157
 AliGenReaderSL.cxx:158
 AliGenReaderSL.cxx:159
 AliGenReaderSL.cxx:160
 AliGenReaderSL.cxx:161
 AliGenReaderSL.cxx:162
 AliGenReaderSL.cxx:163
 AliGenReaderSL.cxx:164
 AliGenReaderSL.cxx:165
 AliGenReaderSL.cxx:166
 AliGenReaderSL.cxx:167
 AliGenReaderSL.cxx:168
 AliGenReaderSL.cxx:169
 AliGenReaderSL.cxx:170
 AliGenReaderSL.cxx:171
 AliGenReaderSL.cxx:172