]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added possibility to use ESD input
authorhljunggr <hljunggr@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Jun 2013 12:25:28 +0000 (12:25 +0000)
committerhljunggr <hljunggr@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Jun 2013 12:25:28 +0000 (12:25 +0000)
to use:
   root -l macros/{loadlibs.C,ConfigOCDB.C}
   AliToyMCEventGeneratorSimple s
   s.SetInputESD("path/to/root_archive.zip")
   s.RunSimulationESD(nevents, ntracks)

   nevents sets the number of events with ntracks!=0 to be used
   ntracks sets the maximum number of tracks in each event to be used

TPC/Upgrade/AliToyMCEventGeneratorSimple.cxx
TPC/Upgrade/AliToyMCEventGeneratorSimple.h
TPC/Upgrade/macros/loadlibs.C

index d0ea445a7668473c98587d174f1a3de1c6b4cc9b..89828a1ca949ecaa3aafd35d80b16e888d05c6b0 100644 (file)
@@ -4,11 +4,17 @@
 #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);
 
 
@@ -17,6 +23,8 @@ AliToyMCEventGeneratorSimple::AliToyMCEventGeneratorSimple()
   ,fVertexMean(0.)
   ,fVertexSigma(7.)
   ,fNtracks(20)
+  ,fInputFileNameESD("")
+  ,fESDCuts(0x0)
 {
   //
   
@@ -27,6 +35,8 @@ AliToyMCEventGeneratorSimple::AliToyMCEventGeneratorSimple(const AliToyMCEventGe
   ,fVertexMean(gen.fVertexMean)
   ,fVertexSigma(gen.fVertexSigma)
   ,fNtracks(gen.fNtracks)
+  ,fInputFileNameESD(gen.fInputFileNameESD)
+  ,fESDCuts(gen.fESDCuts)
 {
 }
 //________________________________________________________________
@@ -43,7 +53,7 @@ AliToyMCEventGeneratorSimple& AliToyMCEventGeneratorSimple::operator = (const Al
   return *this;
 }
 //________________________________________________________________
-void AliToyMCEventGeneratorSimple::SetParameters(Double_t vertexMean, Double_t vertexSigma) {
+void AliToyMCEventGeneratorSimple::SetParametersSimple(Double_t vertexMean, Double_t vertexSigma) {
   fVertexMean = vertexMean;
   fVertexSigma = vertexSigma;
 }
@@ -97,7 +107,7 @@ AliToyMCEvent* AliToyMCEventGeneratorSimple::Generate(Double_t time)
 }
 
 //________________________________________________________________
-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
@@ -125,3 +135,99 @@ void AliToyMCEventGeneratorSimple::RunSimulation(const Int_t nevents/*=10*/, con
   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();
+}
+
index 19d8d61046c519ed6ffc7317e0572cba59ff8408..e80b0cf724f7677122e8641ada29241a407938b0 100644 (file)
@@ -1,10 +1,13 @@
 #ifndef AliToyMCEventGeneratorSimple_H
 #define AliToyMCEventGeneratorSimple_H
 
+#include <AliESDEvent.h>
 
 #include "AliToyMCEventGenerator.h"
-
+#include <TString.h>
 class AliToyMCEvent;
+class AliESDtrackCuts;
+
 
 class AliToyMCEventGeneratorSimple : public AliToyMCEventGenerator {
  public:
@@ -14,15 +17,23 @@ class AliToyMCEventGeneratorSimple : public AliToyMCEventGenerator {
   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)
 
index 6aaf44d74cc353613ccb908e8459cd54acda6898..d3e4c57bb2656aa5e7d6d50719bd4b2c7a631097 100644 (file)
@@ -7,7 +7,7 @@ void loadlibs(const char *dir=".")
   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");
@@ -20,13 +20,14 @@ void loadlibs(const char *dir=".")
   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");
 
@@ -65,7 +66,7 @@ void loadlibs(const char *dir=".")
   //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));
 }