+ // stuff for vertex reconstruction correction systematics
+ if (fdNdEtaCorrectionVertexReco[0]) {
+ AliHeader* header = GetHeader();
+ if (!header) {
+ AliDebug(AliLog::kError, "Header not available");
+ return kFALSE;
+ }
+
+ // is there a smart way to check if it is really a pythia header?
+ AliGenCocktailEventHeader* genHeaders = dynamic_cast<AliGenCocktailEventHeader*>(header->GenEventHeader());
+ if (!genHeaders)
+ return kTRUE;
+
+ TList* headerList = genHeaders->GetHeaders();
+ if (!headerList)
+ return kTRUE;
+
+ AliGenPythiaEventHeader* genHeader = 0;
+ for (Int_t i=0; i<headerList->GetEntries(); i++) {
+ genHeader = dynamic_cast<AliGenPythiaEventHeader*>(headerList->At(i));
+ if (genHeader)
+ break;
+ }
+ if (!genHeader)
+ return kTRUE;
+
+ Int_t processtype = genHeader->ProcessType();
+
+ // get the MC vertex
+ TArrayF vtxMC(3);
+ genHeader->PrimaryVertex(vtxMC);
+
+ Int_t nGoodTracks = list->GetEntries();
+
+ Bool_t eventTriggered = AliPWG0Helper::IsEventTriggered(fESD);
+ Bool_t vertexReconstructed = AliPWG0Helper::IsVertexReconstructed(fESD);
+
+ // genHeader->Print();
+ // printf(" heps %d %d %d %f \n", eventTriggered, vertexReconstructed, processtype, vtxMC[2]);
+
+ // non diffractive
+ if (processtype!=92 && processtype!=93 && processtype!=94) {
+ fdNdEtaCorrectionVertexReco[0]->FillEvent(vtxMC[2], nGoodTracks);
+ if (eventTriggered) {
+ fdNdEtaCorrectionVertexReco[0]->FillEventWithTrigger(vtxMC[2], nGoodTracks);
+ if (vertexReconstructed)
+ fdNdEtaCorrectionVertexReco[0]->FillEventWithTriggerWithReconstructedVertex(vtxMC[2], nGoodTracks);
+ }
+ }
+
+ // single diffractive
+ if (processtype==92 || processtype==93) {
+ fdNdEtaCorrectionVertexReco[1]->FillEvent(vtxMC[2], nGoodTracks);
+ if (eventTriggered) {
+ fdNdEtaCorrectionVertexReco[1]->FillEventWithTrigger(vtxMC[2], nGoodTracks);
+ if (vertexReconstructed)
+ fdNdEtaCorrectionVertexReco[1]->FillEventWithTriggerWithReconstructedVertex(vtxMC[2], nGoodTracks);
+ }
+ }
+
+ // double diffractive
+ if (processtype==94) {
+ fdNdEtaCorrectionVertexReco[2]->FillEvent(vtxMC[2], nGoodTracks);
+ if (eventTriggered) {
+ fdNdEtaCorrectionVertexReco[2]->FillEventWithTrigger(vtxMC[2], nGoodTracks);
+ if (vertexReconstructed)
+ fdNdEtaCorrectionVertexReco[2]->FillEventWithTriggerWithReconstructedVertex(vtxMC[2], nGoodTracks);
+ }
+ }
+ }
+