]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/AliJetEmbeddingFromPYTHIATask.cxx
up from salvatore
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / AliJetEmbeddingFromPYTHIATask.cxx
1 // $Id: AliJetEmbeddingFromPYTHIATask.cxx $
2 //
3 // Jet embedding from PYTHIA task.
4 //
5 // Author: S.Aiola, C.Loizides
6
7 #include "AliJetEmbeddingFromPYTHIATask.h"
8
9 #include <TFile.h>
10 #include <TMath.h>
11 #include <TString.h>
12 #include <TRandom.h>
13
14 #include "AliVEvent.h"
15 #include "AliLog.h"
16
17 ClassImp(AliJetEmbeddingFromPYTHIATask)
18
19 //________________________________________________________________________
20 AliJetEmbeddingFromPYTHIATask::AliJetEmbeddingFromPYTHIATask() : 
21   AliJetEmbeddingFromAODTask("AliJetEmbeddingFromPYTHIATask", kFALSE),
22   fPYTHIAPath(),
23   fPtHardBinScaling(),
24   fLHC11hAnchorRun(kTRUE),
25   fAnchorRun(-1),
26   fCurrentPtHardBin(-1)
27 {
28   // Default constructor.
29   SetSuffix("PYTHIAEmbedding");
30   fTotalFiles = 2000;
31   fRandomAccess = kTRUE;
32 }
33
34 //________________________________________________________________________
35 AliJetEmbeddingFromPYTHIATask::AliJetEmbeddingFromPYTHIATask(const char *name) : 
36   AliJetEmbeddingFromAODTask(name, kFALSE),
37   fPYTHIAPath("/alice/sim/2012/LHC12a15e"),
38   fPtHardBinScaling(),
39   fLHC11hAnchorRun(kTRUE),
40   fAnchorRun(-1),
41   fCurrentPtHardBin(-1)
42 {
43   // Standard constructor.
44   SetSuffix("PYTHIAEmbedding");
45   fTotalFiles = 2000;
46   fRandomAccess = kTRUE;
47 }
48
49 //________________________________________________________________________
50 AliJetEmbeddingFromPYTHIATask::~AliJetEmbeddingFromPYTHIATask()
51 {
52   // Destructor
53 }
54
55 //________________________________________________________________________
56 Bool_t AliJetEmbeddingFromPYTHIATask::ExecOnce() 
57 {
58   if (fPtHardBinScaling.GetSize() > 0) {
59     Double_t sum = 0;
60     for (Int_t i = 0; i < fPtHardBinScaling.GetSize(); i++) 
61       sum += fPtHardBinScaling[i];
62     
63     if (sum == 0) {
64       AliWarning("No hard pt bin scaling!");
65       sum = fPtHardBinScaling.GetSize();
66     }
67     
68     for (Int_t i = 0; i < fPtHardBinScaling.GetSize(); i++) 
69       fPtHardBinScaling[i] /= sum;
70   }
71
72   return AliJetEmbeddingFromAODTask::ExecOnce();
73 }
74
75 //________________________________________________________________________
76 Bool_t AliJetEmbeddingFromPYTHIATask::GetNextEntry() 
77 {
78   Int_t newPtHard = GetRandomPtHardBin();
79
80   if (newPtHard != fCurrentPtHardBin) {
81     fCurrentPtHardBin = newPtHard;
82     if (!OpenNextFile()) return kFALSE;
83   }
84
85   return AliJetEmbeddingFromAODTask::GetNextEntry();
86 }
87
88 //________________________________________________________________________
89 Int_t AliJetEmbeddingFromPYTHIATask::GetRandomPtHardBin() 
90 {
91   static Int_t order[20]={-1};
92
93   if (order[0] == -1)
94     TMath::Sort(fPtHardBinScaling.GetSize(), fPtHardBinScaling.GetArray(), order);
95
96   Double_t rnd = gRandom->Rndm();
97   Double_t sum = 0;
98   Int_t ptHard = -1;
99   for (Int_t i = 0; i < fPtHardBinScaling.GetSize(); i++) {
100     sum += fPtHardBinScaling[order[i]];
101     if (sum >= rnd) {
102       ptHard = order[i];
103       break;
104     }
105   }
106
107   return ptHard;
108 }
109
110 //________________________________________________________________________
111 Bool_t AliJetEmbeddingFromPYTHIATask::UserNotify()
112 {
113   if (!fLHC11hAnchorRun)
114     return kTRUE;
115   
116   Int_t runNumber = InputEvent()->GetRunNumber();
117
118   Int_t semiGoodRunList[28] = {169975, 169981, 170038, 170040, 170083, 170084, 170085, 170088, 
119                                170089, 170091, 170152, 170155, 170159, 170163, 170193, 170195, 
120                                170203, 170204, 170205, 170228, 170230, 170264, 170268, 170269, 
121                                170270, 170306, 170308, 170309};
122
123   fAnchorRun = 169838; // Assume it is a good run
124
125   for (Int_t i = 0; i < 28; i++) {
126     if (runNumber == semiGoodRunList[i]) { // If it is semi good, change the anchor run
127       fAnchorRun = 170040;
128       break;
129     }
130   }
131
132   return kTRUE;
133 }
134
135 //________________________________________________________________________
136 TString AliJetEmbeddingFromPYTHIATask::GetNextFileName() 
137 {
138   fCurrentAODFileID = TMath::Nint(gRandom->Rndm()*(fTotalFiles-1))+1;
139
140   TString fileName(fPYTHIAPath);
141   if (!fileName.EndsWith("/"))
142     fileName += "/";
143   
144   fileName += fAnchorRun;
145   fileName += "/";
146   fileName += fCurrentPtHardBin;
147   fileName += "/";
148   if (fCurrentAODFileID < 10)
149     fileName += "00";
150   else if (fCurrentAODFileID < 100)
151     fileName += "0";
152   fileName += fCurrentAODFileID;
153   fileName += "/AliAOD.root";
154
155   return fileName;
156 }