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

// Read the old ALICE event format based on CW-ntuples
// http://consult.cern.ch/alice/Internal_Notes/1995/32/abstract
// .cwn file have to be converted to .root using h2root
// Use SetFileName(file) to read from "file" 
// Author: andreas.morsch@cern.ch

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

#include "AliGenReaderCwn.h"

ClassImp(AliGenReaderCwn)

AliGenReaderCwn::AliGenReaderCwn():
    fNcurrent(0),
    fNparticle(0),
    fNparticleMax(0),
    fTreeNtuple(0),
    fNihead(0),
    fNrhead(0),
    fIdpart(0),
    fTheta(0.),
    fPhi(0.),
    fP(0.),
    fE(0.)
{
// Default constructor
    Int_t i;
    for (i = 0; i <  6; i++) fRhead[i] = 0.;
    for (i = 0; i < 12; i++) fIhead[i] = 0;
}


AliGenReaderCwn::AliGenReaderCwn(const AliGenReaderCwn &reader):
    AliGenReader(reader),
    fNcurrent(0),
    fNparticle(0),
    fNparticleMax(0),
    fTreeNtuple(0),
    fNihead(0),
    fNrhead(0),
    fIdpart(0),
    fTheta(0.),
    fPhi(0.),
    fP(0.),
    fE(0.)
{
    // Copy constructor
    Int_t i;
    for (i = 0; i <  6; i++) fRhead[i] = 0.;
    for (i = 0; i < 12; i++) fIhead[i] = 0;
    reader.Copy(*this);
}


AliGenReaderCwn::~AliGenReaderCwn()
{
    delete fTreeNtuple;
}

void AliGenReaderCwn::Init() 
{
//
// reset the existing file environment and open a new root file if
// the pointer to the Fluka tree is null
    
    TFile *pFile=0;
    if (!pFile) {
	pFile = new TFile(fFileName);
	pFile->cd();
	printf("\n I have opened %s file \n", fFileName);
    }
// get the tree address in the Fluka boundary source file
    fTreeNtuple = (TTree*)gDirectory->Get("h888");

    TTree *h2=fTreeNtuple;
//Set branch addresses
    h2->SetBranchAddress("Nihead",&fNihead);
    h2->SetBranchAddress("Ihead",fIhead);
    h2->SetBranchAddress("Nrhead",&fNrhead);
    h2->SetBranchAddress("Rhead",fRhead);
    h2->SetBranchAddress("Idpart",&fIdpart);
    h2->SetBranchAddress("Theta",&fTheta);
    h2->SetBranchAddress("Phi",&fPhi);
    h2->SetBranchAddress("P",&fP);
    h2->SetBranchAddress("E",&fE);
}

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

    Int_t nentries = (Int_t) fTreeNtuple->GetEntries();
    if (fNcurrent < nentries) {
	fNcurrent++;
	
	Int_t i5=fIhead[4];
	Int_t i6=fIhead[5];
	if (i5==0) {
	    printf("\n This should never happen !\n");
	    nTracks = 0;
	} else {
	    printf("\n Next event contains %d tracks! \n", i6);
	    nTracks = i6;
	}    
	fNparticleMax = nTracks;
	return nTracks;
    }

    return 0;
}

TParticle* AliGenReaderCwn::NextParticle() 
{
// Read next particle
//  
    Float_t prwn;
    Float_t p[4];
// Read the next particle
    if (fCode == kGEANT3) fIdpart=TVirtualMC::GetMC()->PDGFromId(fIdpart);
    Double_t amass = TDatabasePDG::Instance()->GetParticle(fIdpart)->Mass();
    if(fE<=amass) {
	Warning("Generate","Particle %d  E = %f mass = %f %f %f \n",
		fIdpart,fE,amass, fPhi, fTheta);
	prwn=0;
    } else {
	prwn=sqrt((fE+amass)*(fE-amass));
    }

    fTheta *= TMath::Pi()/180.;
    fPhi    = (fPhi-180)*TMath::Pi()/180.;      
    p[0] = prwn*TMath::Sin(fTheta)*TMath::Cos(fPhi);
    p[1] = prwn*TMath::Sin(fTheta)*TMath::Sin(fPhi);      
    p[2] = prwn*TMath::Cos(fTheta);
    p[3] = fE;
    TParticle* particle = new TParticle(fIdpart, 0, -1, -1, -1, -1, p[0], p[1], p[2], p[3], 0., 0., 0., 0.);
    fNcurrent++;
    fNparticle++;
    return particle;
}



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

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




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