]>
Commit | Line | Data |
---|---|---|
a6e51e61 | 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; | |
7030f36f | 31 | fRandomAccess = kTRUE; |
a6e51e61 | 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; | |
7030f36f | 46 | fRandomAccess = kTRUE; |
a6e51e61 | 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 | } |