3 // Jet embedding from PYTHIA task.
5 // Author: S.Aiola, C.Loizides
7 #include "AliJetEmbeddingFromPYTHIATask.h"
13 #include <TParameter.h>
16 #include <THashTable.h>
19 #include "AliVEvent.h"
22 ClassImp(AliJetEmbeddingFromPYTHIATask)
24 //________________________________________________________________________
25 AliJetEmbeddingFromPYTHIATask::AliJetEmbeddingFromPYTHIATask() :
26 AliJetEmbeddingFromAODTask("AliJetEmbeddingFromPYTHIATask"),
29 fLHC11hAnchorRun(kTRUE),
32 fUseAsVetoTable(kTRUE),
33 fMinEntriesPerPtHardBin(1),
34 fCurrentPtHardBin(-1),
39 // Default constructor.
40 SetSuffix("PYTHIAEmbedding");
42 fRandomAccess = kTRUE;
46 //________________________________________________________________________
47 AliJetEmbeddingFromPYTHIATask::AliJetEmbeddingFromPYTHIATask(const char *name, Bool_t drawqa) :
48 AliJetEmbeddingFromAODTask(name, drawqa),
49 fPYTHIAPath("alien:///alice/sim/2012/LHC12a15e_fix/%d/%d/AOD149/%04d/AliAOD.root"),
51 fLHC11hAnchorRun(kTRUE),
54 fUseAsVetoTable(kTRUE),
55 fMinEntriesPerPtHardBin(1),
56 fCurrentPtHardBin(-1),
61 // Standard constructor.
62 SetSuffix("PYTHIAEmbedding");
64 fRandomAccess = kTRUE;
68 //________________________________________________________________________
69 AliJetEmbeddingFromPYTHIATask::~AliJetEmbeddingFromPYTHIATask()
74 //________________________________________________________________________
75 void AliJetEmbeddingFromPYTHIATask::UserCreateOutputObjects()
80 AliJetModelBaseTask::UserCreateOutputObjects();
82 fHistPtHardBins = new TH1F("fHistPtHardBins", "fHistPtHardBins", 11, 0, 11);
83 fHistPtHardBins->GetXaxis()->SetTitle("p_{T} hard bin");
84 fHistPtHardBins->GetYaxis()->SetTitle("total events");
85 fOutput->Add(fHistPtHardBins);
87 const Int_t ptHardLo[11] = { 0, 5,11,21,36,57, 84,117,152,191,234};
88 const Int_t ptHardHi[11] = { 5,11,21,36,57,84,117,152,191,234,1000000};
90 for (Int_t i = 1; i < 12; i++)
91 fHistPtHardBins->GetXaxis()->SetBinLabel(i, Form("%d-%d",ptHardLo[i-1],ptHardHi[i-1]));
93 fHistEmbeddingQA = new TH1F("fHistEmbeddingQA", "fHistEmbeddingQA", 2, 0, 2);
94 fHistEmbeddingQA->GetXaxis()->SetTitle("Event state");
95 fHistEmbeddingQA->GetYaxis()->SetTitle("counts");
96 fHistEmbeddingQA->GetXaxis()->SetBinLabel(1, "OK");
97 fHistEmbeddingQA->GetXaxis()->SetBinLabel(2, "Not embedded");
98 fOutput->Add(fHistEmbeddingQA);
100 fHistRejectedEvents = new TH1F("fHistRejectedEvents", "fHistRejectedEvents", 500, -0.5, 499.5);
101 fHistRejectedEvents->GetXaxis()->SetTitle("# of rejected events");
102 fHistRejectedEvents->GetYaxis()->SetTitle("counts");
103 fOutput->Add(fHistRejectedEvents);
105 PostData(1, fOutput);
108 //________________________________________________________________________
109 Bool_t AliJetEmbeddingFromPYTHIATask::ExecOnce()
111 if (fPtHardBinScaling.GetSize() > 0) {
113 for (Int_t i = 0; i < fPtHardBinScaling.GetSize(); i++)
114 sum += fPtHardBinScaling[i];
117 AliWarning("No hard pt bin scaling!");
118 sum = fPtHardBinScaling.GetSize();
119 for (Int_t i = 0; i < fPtHardBinScaling.GetSize(); i++)
120 fPtHardBinScaling[i] /= sum;
123 for (Int_t i = 0; i < fPtHardBinScaling.GetSize(); i++)
124 fPtHardBinScaling[i] /= sum;
128 fPtHardBinParam = static_cast<TParameter<int>*>(InputEvent()->FindListObject("PYTHIAPtHardBin"));
129 if (!fPtHardBinParam) {
130 fPtHardBinParam = new TParameter<int>("PYTHIAPtHardBin", 0);
131 AliDebug(3,"Adding pt hard bin param object to the event list...");
132 InputEvent()->AddObject(fPtHardBinParam);
135 return AliJetEmbeddingFromAODTask::ExecOnce();
138 //________________________________________________________________________
139 Bool_t AliJetEmbeddingFromPYTHIATask::GetNextEntry()
141 if (fPtHardBinCount >= fMinEntriesPerPtHardBin || fCurrentPtHardBin < 0) {
144 Int_t newPtHard = GetRandomPtHardBin();
146 if (newPtHard != fCurrentPtHardBin) {
147 new (fPtHardBinParam) TParameter<int>("PYTHIAPtHardBin", newPtHard);
148 fCurrentPtHardBin = newPtHard;
149 if (!OpenNextFile()) return kFALSE;
154 if (fHistPtHardBins) fHistPtHardBins->SetBinContent(fCurrentPtHardBin+1, fHistPtHardBins->GetBinContent(fCurrentPtHardBin+1)+1);
156 return AliJetEmbeddingFromAODTask::GetNextEntry();
159 //________________________________________________________________________
160 Int_t AliJetEmbeddingFromPYTHIATask::GetRandomPtHardBin()
162 static Int_t order[20]={-1};
165 TMath::Sort(fPtHardBinScaling.GetSize(), fPtHardBinScaling.GetArray(), order);
167 Double_t rnd = gRandom->Rndm();
170 for (Int_t i = 0; i < fPtHardBinScaling.GetSize(); i++) {
171 sum += fPtHardBinScaling[order[i]];
181 //________________________________________________________________________
182 Bool_t AliJetEmbeddingFromPYTHIATask::UserNotify()
184 if (!fLHC11hAnchorRun)
187 Int_t runNumber = InputEvent()->GetRunNumber();
189 Int_t semiGoodRunList[32] = {169975, 169981, 170038, 170040, 170083, 170084, 170085,
190 170088, 170089, 170091, 170152, 170155, 170159, 170163,
191 170193, 170195, 170203, 170204, 170228, 170230, 170268,
192 170269, 170270, 170306, 170308, 170309, 169238, 169160,
193 169156, 169148, 169145, 169144};
195 fAnchorRun = 169838; // Assume it is a good run
197 for (Int_t i = 0; i < 32; i++) {
198 if (runNumber == semiGoodRunList[i]) { // If it is semi good, change the anchor run
207 //________________________________________________________________________
208 TFile* AliJetEmbeddingFromPYTHIATask::GetNextFile()
210 fCurrentAODFileID = TMath::Nint(gRandom->Rndm()*(fTotalFiles-1))+1;
215 fileName = Form(fPYTHIAPath.Data(), fAnchorRun, fCurrentPtHardBin, fCurrentAODFileID);
217 fileName = Form(fPYTHIAPath.Data(), fCurrentPtHardBin, fCurrentAODFileID);
219 if (fFileTable && fFileTable->GetEntries() > 0) {
220 TObject* obj = fFileTable->FindObject(fileName);
221 if (obj != 0 && fUseAsVetoTable) {
222 AliWarning(Form("File %s found in the vetoed file table. Skipping...", fileName.Data()));
225 if (obj == 0 && !fUseAsVetoTable) {
226 AliWarning(Form("File %s not found in the allowed file table. Skipping...", fileName.Data()));
231 if (fileName.BeginsWith("alien://") && !gGrid) {
232 AliInfo("Trying to connect to AliEn ...");
233 TGrid::Connect("alien://");
236 TString baseFileName(fileName);
237 if (baseFileName.Contains(".zip#")) {
238 Ssiz_t pos = baseFileName.Last('#');
239 baseFileName.Remove(pos);
242 if (gSystem->AccessPathName(baseFileName)) {
243 AliError(Form("File %s does not exist!", baseFileName.Data()));
247 AliDebug(3,Form("Trying to open file %s...", fileName.Data()));
248 TFile *file = TFile::Open(fileName);
250 if (!file || file->IsZombie()) {
251 AliError(Form("Unable to open file: %s!", fileName.Data()));