#include <TRandom.h>
#include <TF1.h>
#include <TStopwatch.h>
+#include <AliESDtrackCuts.h>
+#include <AliESDtrack.h>
+#include <TFile.h>
+#include <TTree.h>
+
#include "AliToyMCEvent.h"
#include "AliToyMCEventGeneratorSimple.h"
+
ClassImp(AliToyMCEventGeneratorSimple);
,fVertexMean(0.)
,fVertexSigma(7.)
,fNtracks(20)
+ ,fInputFileNameESD("")
+ ,fESDCuts(0x0)
{
//
,fVertexMean(gen.fVertexMean)
,fVertexSigma(gen.fVertexSigma)
,fNtracks(gen.fNtracks)
+ ,fInputFileNameESD(gen.fInputFileNameESD)
+ ,fESDCuts(gen.fESDCuts)
{
}
//________________________________________________________________
return *this;
}
//________________________________________________________________
-void AliToyMCEventGeneratorSimple::SetParameters(Double_t vertexMean, Double_t vertexSigma) {
+void AliToyMCEventGeneratorSimple::SetParametersSimple(Double_t vertexMean, Double_t vertexSigma) {
fVertexMean = vertexMean;
fVertexSigma = vertexSigma;
}
}
//________________________________________________________________
-void AliToyMCEventGeneratorSimple::RunSimulation(const Int_t nevents/*=10*/, const Int_t ntracks/*=400*/)
+void AliToyMCEventGeneratorSimple::RunSimulationSimple(const Int_t nevents/*=10*/, const Int_t ntracks/*=400*/)
{
//
// run simple simulation with equal event spacing
CloseOutputFile();
}
+
+
+//________________________________________________________________
+AliToyMCEvent* AliToyMCEventGeneratorSimple::GenerateESD(AliESDEvent &esdEvent, Double_t time) {
+
+
+ AliToyMCEvent *retEvent = new AliToyMCEvent();
+ retEvent->SetT0(time);
+ retEvent->SetX(esdEvent.GetPrimaryVertex()->GetX());
+ retEvent->SetY(esdEvent.GetPrimaryVertex()->GetY());
+ retEvent->SetZ(esdEvent.GetPrimaryVertex()->GetZ());
+
+
+
+ if(!fNtracks) fNtracks = esdEvent.GetNumberOfTracks();
+ Int_t nUsedTracks = 0;
+ for(Int_t iTrack=0; iTrack<esdEvent.GetNumberOfTracks(); iTrack++){
+
+ AliESDtrack *part = esdEvent.GetTrack(iTrack);
+ if(!part) continue;
+ if (!fESDCuts->AcceptTrack(/*(AliESDtrack*)*/part))continue;
+
+ Double_t pxyz[3];
+ pxyz[0]=part->Px();
+ pxyz[1]=part->Py();
+ pxyz[2]=part->Pz();
+ Double_t vertex[3]={retEvent->GetX(),retEvent->GetY(),retEvent->GetZ()};
+
+ Double_t cv[21]={0};
+ Int_t sign = part->Charge();
+ AliToyMCTrack *tempTrack = new AliToyMCTrack(vertex,pxyz,cv,sign);
+
+ Bool_t trackDist = DistortTrack(*tempTrack, time);
+ if(trackDist) {
+ retEvent->AddTrack(*tempTrack);
+ nUsedTracks++;
+ }
+ delete tempTrack;
+
+ if(nUsedTracks >= fNtracks) break;
+ }
+
+ return retEvent;
+}
+//________________________________________________________________
+void AliToyMCEventGeneratorSimple::RunSimulationESD(const Int_t nevents/*=10*/, const Int_t ntracks/*=400*/)
+{
+ //
+ // run simulation using esd input with equal event spacing
+ //
+
+ if (!ConnectOutputFile()) return;
+ TFile f(Form("%s%s",fInputFileNameESD.Data(),"#AliESDs.root"));
+ if(!f.IsOpen()) {
+ std::cout << "file "<<fInputFileNameESD.Data() <<" could not be opened" << std::endl;
+ return;
+ }
+ TTree* esdTree = (TTree*) f.Get("esdTree");
+ if(!esdTree) {
+ std::cout <<"no esdTree in file " << std::endl;
+ return;
+ }
+ InitSpaceCharge();
+ AliESDEvent* esdEvent = new AliESDEvent();
+ fNtracks = ntracks;
+
+ esdEvent->ReadFromTree(esdTree);
+ Double_t eventTime=0.;
+ const Double_t eventSpacing=1./50e3; //50kHz equally spaced
+ TStopwatch s;
+ Int_t nEvents = nevents;
+ fESDCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE,1);
+ if(nevents>esdTree->GetEntries()) nEvents = esdTree->GetEntries();
+ Int_t nUsedEvents = 0;
+ for (Int_t ievent=0; ievent<esdTree->GetEntries(); ++ievent){
+ printf("Generating event %3d (%.3g)\n",ievent,eventTime);
+ esdTree->GetEvent(ievent);
+ if(esdEvent->GetNumberOfTracks()==0) {
+ std::cout << " tracks == 0" << std::endl;
+ continue;
+ }
+
+ fEvent = GenerateESD(*esdEvent, eventTime);
+ nUsedEvents++;
+ FillTree();
+ delete fEvent;
+ fEvent=0x0;
+ eventTime+=eventSpacing;
+ if(nUsedEvents>=nevents) break;
+ }
+ s.Stop();
+ s.Print();
+
+ CloseOutputFile();
+}
+
#ifndef AliToyMCEventGeneratorSimple_H
#define AliToyMCEventGeneratorSimple_H
+#include <AliESDEvent.h>
#include "AliToyMCEventGenerator.h"
-
+#include <TString.h>
class AliToyMCEvent;
+class AliESDtrackCuts;
+
class AliToyMCEventGeneratorSimple : public AliToyMCEventGenerator {
public:
AliToyMCEventGeneratorSimple & operator = (const AliToyMCEventGeneratorSimple &gen);
AliToyMCEvent* Generate(Double_t time);
- void SetParameters(Double_t vertexMean, Double_t vertexSigma);
+ AliToyMCEvent* GenerateESD(AliESDEvent& esdEvent, Double_t time);
+ void SetParametersSimple(Double_t vertexMean, Double_t vertexSigma);
+
+ void RunSimulationSimple(const Int_t nevents=10, const Int_t ntracks=20);
+ void RunSimulationESD(const Int_t nevents=10, const Int_t ntracks=20);
+ void SetInputESD(const Char_t* filename) {fInputFileNameESD = filename;}
- void RunSimulation(const Int_t nevents=10, const Int_t ntracks=20);
private:
Double_t fVertexMean;
Double_t fVertexSigma;
Int_t fNtracks;
+ TString fInputFileNameESD;
+
+ AliESDtrackCuts *fESDCuts;
+ //AliESDEvent* fESDEvent;
ClassDef(AliToyMCEventGeneratorSimple, 1)
gSystem->AddIncludePath("-I$ROOTSYS/include");
Bool_t hasAR=!TString(gSystem->Getenv("ALICE_ROOT")).IsNull();
// if (hasAR) gSystem->AddIncludePath("-I$ALICE_ROOT/ -I$ALICE_ROOT/include -I$ALICE_ROOT/STEER -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/RAW");
- if (hasAR) gSystem->AddIncludePath("-I$ALICE_ROOT/ -I$ALICE_ROOT/include -I$ALICE_ROOT/STEER -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/TPC/Base -I$ALICE_ROOT/TPC/Rec -I$ALICE_ROOT/RAW -I$ALICE_ROOT/STEER/STEERBase/ -I$ALICE_ROOT/STEER/ESD/");
+ /*if (hasAR)*/ gSystem->AddIncludePath("-I$ALICE_ROOT/ -I$ALICE_ROOT/include -I$ALICE_ROOT/STEER -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/TPC/Base -I$ALICE_ROOT/TPC/Rec -I$ALICE_ROOT/RAW -I$ALICE_ROOT/STEER/STEERBase/ -I$ALICE_ROOT/STEER/ESD/ -I$ALICE_ROOT/HLT/BASE/");
gSystem->Load("libCore");
gSystem->Load("libPhysics");
gSystem->Load("libNet");
gSystem->Load("libTree");
gSystem->Load("libProof");
-
gSystem->Load("libSTEERBase");
+ gSystem->Load("libAOD");
gSystem->Load("libESD");
gSystem->Load("libCDB");
gSystem->Load("libRAWDatabase");
gSystem->Load("libRAWDatarec");
gSystem->Load("libANALYSIS");
+ gSystem->Load("libANALYSISalice");
gSystem->Load("libSTEER");
gSystem->Load("libSTAT");
//gROOT->LoadMacro(Form("%s/AliToyMCEvent.cxx+g",dir));
// gROOT->LoadMacro(Form("%s/AliToyMCEventGenerator.cxx+g",dir));
// gROOT->LoadMacro(Form("%s/AliToyMCEventGeneratorSimple.cxx+g",dir));
- // gROOT->LoadMacro(Form("%s/ToyMCDrawer.cxx+g",dir));
+ // gROOT->LoadMacro(Form("%s/AliToyMCDrawer.cxx+g",dir));
// disp->SetDrawer(drawer);
-
+ // gROOT->LoadMacro(Form("%s/AliToyMCEventGeneratorESD.cxx+g",dir));
}