ROOT logo
// $Id$

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TH1D.h>
#include <TFile.h>
#include <TTree.h>
#include <TNtuple.h>
#include <TMath.h>
#include <TParticle.h>
#include <TPDGCode.h>
#include <TDatabasePDG.h>
#include <TRandom3.h>
#include <TChain.h>
#include <TFolder.h>
#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliHeader.h"
#include "AliStack.h"
#include "AliPDG.h"
#include "THijing/AliGenHijing.h"
#endif

class MyHeader
{
public:
  MyHeader() : fNATT(0), fEATT(0),fJATT(0),fNT(0),fNP(0),
               fN00(0),fN01(0),fN10(0),fN11(0),fBB(0),fRP(0),
               fPSn(0), fPSp(0), fTSn(0), fTSp(0) {;}
  virtual ~MyHeader() {;}
  Int_t       fNATT;
  Double32_t  fEATT;
  Int_t       fJATT;
  Int_t       fNT;
  Int_t       fNP;
  Int_t       fN00;
  Int_t       fN01;
  Int_t       fN10;
  Int_t       fN11;
  Double32_t  fBB;
  Double32_t  fRP;
  Int_t       fPSn;
  Int_t       fPSp;
  Int_t       fTSn;
  Int_t       fTSp;
  ClassDef(MyHeader,1) // My header class
};

class MyResponse
{
public:
  MyResponse() : fEtch0p(0), fEtch1p(0), fEtch2p(0), fEtch3p(0), fEtch4p(0), fEtch5p(0), fEtchrp(0), 
                 fEtch0n(0), fEtch1n(0), fEtch2n(0), fEtch3n(0), fEtch4n(0), fEtch5n(0), fEtchrn(0),
                 fNch0p(0), fNch1p(0), fNch2p(0), fNch3p(0), fNch4p(0), fNch5p(0), fNchrp(0),
                 fNch0n(0), fNch1n(0), fNch2n(0), fNch3n(0), fNch4n(0), fNch5n(0), fNchrn(0) {;}
  virtual ~MyResponse() {;}
  Double32_t  fEtch0p;
  Double32_t  fEtch1p;
  Double32_t  fEtch2p;
  Double32_t  fEtch3p;
  Double32_t  fEtch4p;
  Double32_t  fEtch5p;
  Double32_t  fEtchrp;
  Double32_t  fEtch0n;
  Double32_t  fEtch1n;
  Double32_t  fEtch2n;
  Double32_t  fEtch3n;
  Double32_t  fEtch4n;
  Double32_t  fEtch5n;
  Double32_t  fEtchrn;
  Int_t       fNch0p;
  Int_t       fNch1p;
  Int_t       fNch2p;
  Int_t       fNch3p;
  Int_t       fNch4p;
  Int_t       fNch5p;
  Int_t       fNchrp;
  Int_t       fNch0n;
  Int_t       fNch1n;
  Int_t       fNch2n;
  Int_t       fNch3n;
  Int_t       fNch4n;
  Int_t       fNch5n;
  Int_t       fNchrn;
  ClassDef(MyResponse,1) // My reponse class
};

void createGlauberTree(Int_t nEvents,
                       const char *outFileName = "treeout.root");

//-----------------------------------------------------------------------------------------------------

void createGlauberTree(Int_t nEvents,
                       const char *outFileName) 
{
  AliPDG::AddParticlesToPdgDataBase();
  TDatabasePDG::Instance();

  // Run loader
  TFolder *folder = new TFolder("myfolder","myfolder");
  AliRunLoader* rl = new AliRunLoader(folder);
  rl->MakeHeader();
  rl->MakeStack();
  AliStack* stack = rl->Stack();
  //AliHeader* rheader = rl->GetHeader();

  AliGenHijing *genHi = new AliGenHijing(-1);
  genHi->SetStack(stack);
  genHi->SetEnergyCMS(2760);
  genHi->SetReferenceFrame("CMS");
  genHi->SetProjectile("A", 208, 82);
  genHi->SetTarget    ("A", 208, 82);
  genHi->SetPtHardMin (2.3);
  genHi->SetImpactParameterRange(0.,30);
  genHi->SetJetQuenching(0); // enable jet quenching
  genHi->SetShadowing(1);    // enable shadowing
  genHi->SetDecaysOff(1);    // neutral pion and heavy particle decays switched off
  genHi->Init();

  MyHeader  *myheader = new MyHeader;
  MyResponse *myresp  = new MyResponse;

  TFile *outFile = TFile::Open(outFileName, "RECREATE");
  outFile->SetCompressionLevel(5);
  TDirectory::TContext context(outFile);

  TTree *tree = new TTree("glaubertree", "Glauber tree");
  tree->Branch("header",&myheader, 32*1024, 99);
  tree->Branch("response",&myresp, 32*1024, 99);

  TNtuple *ntuple = new TNtuple("gnt", "Glauber ntuple", "npart:ncoll:b");

  Double_t etas[] = {-10,-5,-4,-3,-2,-1,0,1,2,3,4,5,10};
  TH1D *hNEta = new TH1D("hNeta","",12,etas);
  TH1D *hEtEta = new TH1D("hEteta","",12,etas);

  // create events and fill them
  for (Int_t iEvent = 0; iEvent < nEvents; ++iEvent) {

    cout << "Event " << iEvent+1 << "/" << nEvents << endl;;
    stack->Reset();
    hNEta->Reset();
    hEtEta->Reset();
    genHi->Generate();
  
    AliStack *s = genHi->GetStack();
    const TObjArray *parts = s->Particles();
    Int_t nents = parts->GetEntries();
    for (Int_t i = 0; i<nents; ++i) {
      TParticle *p = (TParticle*)parts->At(i);
      //p->Print();
      TParticlePDG *pdg = p->GetPDG(1);
      Int_t c = (Int_t)(TMath::Abs(pdg->Charge()));
      if (c!=0) {
        hNEta->Fill(p->Eta());
        hEtEta->Fill(p->Eta(),p->Pt());
      }
    }

    AliGenHijingEventHeader *h = (AliGenHijingEventHeader*)genHi->CollisionGeometry();
    myheader->fNATT = nents;
    myheader->fEATT = h->TotalEnergy();
    myheader->fJATT = h->HardScatters();
    myheader->fNT   = h->TargetParticipants();
    myheader->fNP   = h->ProjectileParticipants();
    myheader->fN00  = h->NwNw();
    myheader->fN01  = h->NwN();
    myheader->fN10  = h->NNw();
    myheader->fN11  = h->NN();
    myheader->fBB   = h->ImpactParameter();
    myheader->fRP   = h->ReactionPlaneAngle();
    myheader->fPSn  = h->ProjSpectatorsn();
    myheader->fPSp  = h->ProjSpectatorsp();
    myheader->fTSn  = h->TargSpectatorsn();
    myheader->fTSp  = h->TargSpectatorsn();

    myresp->fEtch0p = hEtEta->GetBinContent(hEtEta->FindBin(0.5));
    myresp->fEtch1p = hEtEta->GetBinContent(hEtEta->FindBin(1.5));
    myresp->fEtch2p = hEtEta->GetBinContent(hEtEta->FindBin(2.5));
    myresp->fEtch3p = hEtEta->GetBinContent(hEtEta->FindBin(3.5));
    myresp->fEtch4p = hEtEta->GetBinContent(hEtEta->FindBin(4.5));
    myresp->fEtch5p = hEtEta->GetBinContent(hEtEta->FindBin(5.5));
    myresp->fEtchrp = hEtEta->GetBinContent(hEtEta->FindBin(10.5));
    myresp->fEtch0n = hEtEta->GetBinContent(hEtEta->FindBin(-0.5));
    myresp->fEtch1n = hEtEta->GetBinContent(hEtEta->FindBin(-1.5));
    myresp->fEtch2n = hEtEta->GetBinContent(hEtEta->FindBin(-2.5));
    myresp->fEtch3n = hEtEta->GetBinContent(hEtEta->FindBin(-3.5));
    myresp->fEtch4n = hEtEta->GetBinContent(hEtEta->FindBin(-4.5));
    myresp->fEtch5n = hEtEta->GetBinContent(hEtEta->FindBin(-5.5));
    myresp->fEtchrn = hEtEta->GetBinContent(hEtEta->FindBin(-10.5));
    myresp->fNch0p  = hNEta->GetBinContent(hNEta->FindBin(0.5));
    myresp->fNch1p  = hNEta->GetBinContent(hNEta->FindBin(1.5));
    myresp->fNch2p  = hNEta->GetBinContent(hNEta->FindBin(2.5));
    myresp->fNch3p  = hNEta->GetBinContent(hNEta->FindBin(3.5));
    myresp->fNch4p  = hNEta->GetBinContent(hNEta->FindBin(4.5));
    myresp->fNch5p  = hNEta->GetBinContent(hNEta->FindBin(5.5));
    myresp->fNchrp  = hNEta->GetBinContent(hNEta->FindBin(10.5));
    myresp->fNch0n  = hNEta->GetBinContent(hNEta->FindBin(-0.5));
    myresp->fNch1n  = hNEta->GetBinContent(hNEta->FindBin(-1.5));
    myresp->fNch2n  = hNEta->GetBinContent(hNEta->FindBin(-2.5));
    myresp->fNch3n  = hNEta->GetBinContent(hNEta->FindBin(-3.5));
    myresp->fNch4n  = hNEta->GetBinContent(hNEta->FindBin(-4.5));
    myresp->fNch5n  = hNEta->GetBinContent(hNEta->FindBin(-5.5));
    myresp->fNchrn  = hNEta->GetBinContent(hNEta->FindBin(-10.5));

    tree->Fill();

    if (ntuple) {
      Int_t np = h->TargetParticipants() + h->ProjectileParticipants();
      Int_t nc = h->NwNw() + h->NwN() + h->NNw() + h->NN();
      Double_t b = h->ImpactParameter();
      ntuple->Fill(np,nc,b);
    }

  } // end of event loop

  tree->Write();
  ntuple->Write();
  outFile->Close();
}
 createHijingGlauberTestTree.C:1
 createHijingGlauberTestTree.C:2
 createHijingGlauberTestTree.C:3
 createHijingGlauberTestTree.C:4
 createHijingGlauberTestTree.C:5
 createHijingGlauberTestTree.C:6
 createHijingGlauberTestTree.C:7
 createHijingGlauberTestTree.C:8
 createHijingGlauberTestTree.C:9
 createHijingGlauberTestTree.C:10
 createHijingGlauberTestTree.C:11
 createHijingGlauberTestTree.C:12
 createHijingGlauberTestTree.C:13
 createHijingGlauberTestTree.C:14
 createHijingGlauberTestTree.C:15
 createHijingGlauberTestTree.C:16
 createHijingGlauberTestTree.C:17
 createHijingGlauberTestTree.C:18
 createHijingGlauberTestTree.C:19
 createHijingGlauberTestTree.C:20
 createHijingGlauberTestTree.C:21
 createHijingGlauberTestTree.C:22
 createHijingGlauberTestTree.C:23
 createHijingGlauberTestTree.C:24
 createHijingGlauberTestTree.C:25
 createHijingGlauberTestTree.C:26
 createHijingGlauberTestTree.C:27
 createHijingGlauberTestTree.C:28
 createHijingGlauberTestTree.C:29
 createHijingGlauberTestTree.C:30
 createHijingGlauberTestTree.C:31
 createHijingGlauberTestTree.C:32
 createHijingGlauberTestTree.C:33
 createHijingGlauberTestTree.C:34
 createHijingGlauberTestTree.C:35
 createHijingGlauberTestTree.C:36
 createHijingGlauberTestTree.C:37
 createHijingGlauberTestTree.C:38
 createHijingGlauberTestTree.C:39
 createHijingGlauberTestTree.C:40
 createHijingGlauberTestTree.C:41
 createHijingGlauberTestTree.C:42
 createHijingGlauberTestTree.C:43
 createHijingGlauberTestTree.C:44
 createHijingGlauberTestTree.C:45
 createHijingGlauberTestTree.C:46
 createHijingGlauberTestTree.C:47
 createHijingGlauberTestTree.C:48
 createHijingGlauberTestTree.C:49
 createHijingGlauberTestTree.C:50
 createHijingGlauberTestTree.C:51
 createHijingGlauberTestTree.C:52
 createHijingGlauberTestTree.C:53
 createHijingGlauberTestTree.C:54
 createHijingGlauberTestTree.C:55
 createHijingGlauberTestTree.C:56
 createHijingGlauberTestTree.C:57
 createHijingGlauberTestTree.C:58
 createHijingGlauberTestTree.C:59
 createHijingGlauberTestTree.C:60
 createHijingGlauberTestTree.C:61
 createHijingGlauberTestTree.C:62
 createHijingGlauberTestTree.C:63
 createHijingGlauberTestTree.C:64
 createHijingGlauberTestTree.C:65
 createHijingGlauberTestTree.C:66
 createHijingGlauberTestTree.C:67
 createHijingGlauberTestTree.C:68
 createHijingGlauberTestTree.C:69
 createHijingGlauberTestTree.C:70
 createHijingGlauberTestTree.C:71
 createHijingGlauberTestTree.C:72
 createHijingGlauberTestTree.C:73
 createHijingGlauberTestTree.C:74
 createHijingGlauberTestTree.C:75
 createHijingGlauberTestTree.C:76
 createHijingGlauberTestTree.C:77
 createHijingGlauberTestTree.C:78
 createHijingGlauberTestTree.C:79
 createHijingGlauberTestTree.C:80
 createHijingGlauberTestTree.C:81
 createHijingGlauberTestTree.C:82
 createHijingGlauberTestTree.C:83
 createHijingGlauberTestTree.C:84
 createHijingGlauberTestTree.C:85
 createHijingGlauberTestTree.C:86
 createHijingGlauberTestTree.C:87
 createHijingGlauberTestTree.C:88
 createHijingGlauberTestTree.C:89
 createHijingGlauberTestTree.C:90
 createHijingGlauberTestTree.C:91
 createHijingGlauberTestTree.C:92
 createHijingGlauberTestTree.C:93
 createHijingGlauberTestTree.C:94
 createHijingGlauberTestTree.C:95
 createHijingGlauberTestTree.C:96
 createHijingGlauberTestTree.C:97
 createHijingGlauberTestTree.C:98
 createHijingGlauberTestTree.C:99
 createHijingGlauberTestTree.C:100
 createHijingGlauberTestTree.C:101
 createHijingGlauberTestTree.C:102
 createHijingGlauberTestTree.C:103
 createHijingGlauberTestTree.C:104
 createHijingGlauberTestTree.C:105
 createHijingGlauberTestTree.C:106
 createHijingGlauberTestTree.C:107
 createHijingGlauberTestTree.C:108
 createHijingGlauberTestTree.C:109
 createHijingGlauberTestTree.C:110
 createHijingGlauberTestTree.C:111
 createHijingGlauberTestTree.C:112
 createHijingGlauberTestTree.C:113
 createHijingGlauberTestTree.C:114
 createHijingGlauberTestTree.C:115
 createHijingGlauberTestTree.C:116
 createHijingGlauberTestTree.C:117
 createHijingGlauberTestTree.C:118
 createHijingGlauberTestTree.C:119
 createHijingGlauberTestTree.C:120
 createHijingGlauberTestTree.C:121
 createHijingGlauberTestTree.C:122
 createHijingGlauberTestTree.C:123
 createHijingGlauberTestTree.C:124
 createHijingGlauberTestTree.C:125
 createHijingGlauberTestTree.C:126
 createHijingGlauberTestTree.C:127
 createHijingGlauberTestTree.C:128
 createHijingGlauberTestTree.C:129
 createHijingGlauberTestTree.C:130
 createHijingGlauberTestTree.C:131
 createHijingGlauberTestTree.C:132
 createHijingGlauberTestTree.C:133
 createHijingGlauberTestTree.C:134
 createHijingGlauberTestTree.C:135
 createHijingGlauberTestTree.C:136
 createHijingGlauberTestTree.C:137
 createHijingGlauberTestTree.C:138
 createHijingGlauberTestTree.C:139
 createHijingGlauberTestTree.C:140
 createHijingGlauberTestTree.C:141
 createHijingGlauberTestTree.C:142
 createHijingGlauberTestTree.C:143
 createHijingGlauberTestTree.C:144
 createHijingGlauberTestTree.C:145
 createHijingGlauberTestTree.C:146
 createHijingGlauberTestTree.C:147
 createHijingGlauberTestTree.C:148
 createHijingGlauberTestTree.C:149
 createHijingGlauberTestTree.C:150
 createHijingGlauberTestTree.C:151
 createHijingGlauberTestTree.C:152
 createHijingGlauberTestTree.C:153
 createHijingGlauberTestTree.C:154
 createHijingGlauberTestTree.C:155
 createHijingGlauberTestTree.C:156
 createHijingGlauberTestTree.C:157
 createHijingGlauberTestTree.C:158
 createHijingGlauberTestTree.C:159
 createHijingGlauberTestTree.C:160
 createHijingGlauberTestTree.C:161
 createHijingGlauberTestTree.C:162
 createHijingGlauberTestTree.C:163
 createHijingGlauberTestTree.C:164
 createHijingGlauberTestTree.C:165
 createHijingGlauberTestTree.C:166
 createHijingGlauberTestTree.C:167
 createHijingGlauberTestTree.C:168
 createHijingGlauberTestTree.C:169
 createHijingGlauberTestTree.C:170
 createHijingGlauberTestTree.C:171
 createHijingGlauberTestTree.C:172
 createHijingGlauberTestTree.C:173
 createHijingGlauberTestTree.C:174
 createHijingGlauberTestTree.C:175
 createHijingGlauberTestTree.C:176
 createHijingGlauberTestTree.C:177
 createHijingGlauberTestTree.C:178
 createHijingGlauberTestTree.C:179
 createHijingGlauberTestTree.C:180
 createHijingGlauberTestTree.C:181
 createHijingGlauberTestTree.C:182
 createHijingGlauberTestTree.C:183
 createHijingGlauberTestTree.C:184
 createHijingGlauberTestTree.C:185
 createHijingGlauberTestTree.C:186
 createHijingGlauberTestTree.C:187
 createHijingGlauberTestTree.C:188
 createHijingGlauberTestTree.C:189
 createHijingGlauberTestTree.C:190
 createHijingGlauberTestTree.C:191
 createHijingGlauberTestTree.C:192
 createHijingGlauberTestTree.C:193
 createHijingGlauberTestTree.C:194
 createHijingGlauberTestTree.C:195
 createHijingGlauberTestTree.C:196
 createHijingGlauberTestTree.C:197
 createHijingGlauberTestTree.C:198
 createHijingGlauberTestTree.C:199
 createHijingGlauberTestTree.C:200
 createHijingGlauberTestTree.C:201
 createHijingGlauberTestTree.C:202
 createHijingGlauberTestTree.C:203
 createHijingGlauberTestTree.C:204
 createHijingGlauberTestTree.C:205
 createHijingGlauberTestTree.C:206
 createHijingGlauberTestTree.C:207
 createHijingGlauberTestTree.C:208
 createHijingGlauberTestTree.C:209
 createHijingGlauberTestTree.C:210
 createHijingGlauberTestTree.C:211
 createHijingGlauberTestTree.C:212
 createHijingGlauberTestTree.C:213
 createHijingGlauberTestTree.C:214
 createHijingGlauberTestTree.C:215
 createHijingGlauberTestTree.C:216
 createHijingGlauberTestTree.C:217
 createHijingGlauberTestTree.C:218
 createHijingGlauberTestTree.C:219
 createHijingGlauberTestTree.C:220
 createHijingGlauberTestTree.C:221