- \r
- const AliAODVertex *vertexMain = aodEventMain->GetPrimaryVertex();\r
- \r
- if(vertexMain) {\r
- Double32_t fCovMain[6];\r
- vertexMain->GetCovarianceMatrix(fCovMain);\r
- \r
- if(vertexMain->GetNContributors() > 0) {\r
- if(fCovMain[5] != 0) {\r
- fHistEventStats->Fill(3); //events with a proper vertex\r
- if(TMath::Abs(vertexMain->GetX()) < fVxMax) {\r
- if(TMath::Abs(vertexMain->GetY()) < fVyMax) {\r
- if(TMath::Abs(vertexMain->GetZ()) < fVzMax) {\r
- fHistEventStats->Fill(4); //analyzed events\r
- fHistVx->Fill(vertexMain->GetX());\r
- fHistVy->Fill(vertexMain->GetY());\r
- fHistVz->Fill(vertexMain->GetZ());\r
- \r
- // Loop over tracks in main event\r
- for (Int_t iTracksMain = 0; iTracksMain < aodEventMain->GetNumberOfTracks(); iTracksMain++) {\r
- AliAODTrack* aodTrackMain = dynamic_cast<AliAODTrack *>(aodEventMain->GetTrack(iTracksMain));\r
- if (!aodTrackMain) {\r
- AliError(Form("Could not receive track %d", iTracksMain));\r
- continue;\r
- }\r
- \r
- // AOD track cuts\r
- \r
- // For ESD Filter Information: ANALYSIS/macros/AddTaskESDfilter.C\r
- // take only TPC only tracks \r
- fHistTrackStats->Fill(aodTrackMain->GetFilterMap());\r
- if(!aodTrackMain->TestFilterBit(nAODtrackCutBit)) continue;\r
- \r
- v_charge = aodTrackMain->Charge();\r
- v_y = aodTrackMain->Y();\r
- v_eta = aodTrackMain->Eta();\r
- v_phi = aodTrackMain->Phi() * TMath::RadToDeg();\r
- v_E = aodTrackMain->E();\r
- v_pt = aodTrackMain->Pt();\r
- aodTrackMain->PxPyPz(v_p);\r
- \r
- Float_t DCAxy = aodTrackMain->DCA(); // this is the DCA from global track (not exactly what is cut on)\r
- Float_t DCAz = aodTrackMain->ZAtDCA(); // this is the DCA from global track (not exactly what is cut on)\r
- \r
- \r
- // Kinematics cuts from ESD track cuts\r
- if( v_pt < fPtMin || v_pt > fPtMax) continue;\r
- if( v_eta < fEtaMin || v_eta > fEtaMax) continue;\r
- \r
- // Extra DCA cuts (for systematic studies [!= -1])\r
- if( fDCAxyCut != -1 && fDCAzCut != -1){\r
- if(TMath::Sqrt((DCAxy*DCAxy)/(fDCAxyCut*fDCAxyCut)+(DCAz*DCAz)/(fDCAzCut*fDCAzCut)) > 1 ){\r
- continue; // 2D cut\r
- }\r
- }\r
- \r
- // Extra TPC cuts (for systematic studies [!= -1])\r
- if( fTPCchi2Cut != -1 && aodTrackMain->Chi2perNDF() > fTPCchi2Cut){\r
- continue;\r
- }\r
- if( fNClustersTPCCut != -1 && aodTrackMain->GetTPCNcls() < fNClustersTPCCut){\r
- continue;\r
- }\r
- \r
- // fill QA histograms\r
- fHistClus->Fill(aodTrackMain->GetITSNcls(),aodTrackMain->GetTPCNcls());\r
- fHistDCA->Fill(DCAz,DCAxy);\r
- fHistChi2->Fill(aodTrackMain->Chi2perNDF());\r
- fHistPt->Fill(v_pt);\r
- fHistEta->Fill(v_eta);\r
- fHistPhi->Fill(v_phi);\r
- \r
- // fill charge vector\r
- chargeVector[0]->push_back(v_charge);\r
- chargeVector[1]->push_back(v_y);\r
- chargeVector[2]->push_back(v_eta);\r
- chargeVector[3]->push_back(v_phi);\r
- chargeVector[4]->push_back(v_p[0]);\r
- chargeVector[5]->push_back(v_p[1]);\r
- chargeVector[6]->push_back(v_p[2]);\r
- chargeVector[7]->push_back(v_pt);\r
- chargeVector[8]->push_back(v_E);\r
- \r
- } //track loop\r
- \r
- // calculate balance function\r
- fBalance->FillBalance(fCentrality,chargeVector);\r
- // clean charge vector afterwards\r
- for(Int_t i = 0; i < 9; i++){ \r
- chargeVector[i]->clear();\r
- }\r
-\r
- }//Vz cut\r
- }//Vy cut\r
- }//Vx cut\r
- }//proper vertex resolution\r
- }//proper number of contributors\r
- }//vertex object valid\r
- }//triggered event \r
- }//AOD analysis\r
- else{\r
- AliError("Triggered Balance Function analysis only for AODs!");\r
+ }\r
+ \r
+ \r
+ const AliVVertex *vertex = event->GetPrimaryVertex();\r
+ \r
+ if(vertex) {\r
+ Double32_t fCov[6];\r
+ vertex->GetCovarianceMatrix(fCov);\r
+ if(vertex->GetNContributors() > 0) {\r
+ if(fCov[5] != 0) {\r
+ fHistEventStats->Fill(3); //events with a proper vertex\r
+ if(TMath::Abs(vertex->GetX()) < fVxMax) {\r
+ if(TMath::Abs(vertex->GetY()) < fVyMax) {\r
+ if(TMath::Abs(vertex->GetZ()) < fVzMax) {\r
+ fHistEventStats->Fill(4); //analyzed events\r
+ fHistVx->Fill(vertex->GetX());\r
+ fHistVy->Fill(vertex->GetY());\r
+ fHistVz->Fill(vertex->GetZ());\r
+\r
+ // take only events inside centrality class\r
+ if((fCentrality > fCentralityPercentileMin) && (fCentrality < fCentralityPercentileMax)){\r
+ return fCentrality; \r
+ }//centrality class\r
+ }//Vz cut\r
+ }//Vy cut\r
+ }//Vx cut\r
+ }//proper vertex resolution\r
+ }//proper number of contributors\r
+ }//vertex object valid\r
+ }//triggered event \r
+ \r
+ // in all other cases return -1 (event not accepted)\r
+ return -1;\r
+}\r
+\r
+//________________________________________________________________________\r
+TObjArray* AliAnalysisTaskTriggeredBF::GetAcceptedTracks(AliVEvent *event){\r
+ // Returns TObjArray with tracks after all track cuts (only for AOD!)\r
+ // Fills QA histograms\r
+\r
+ //output TObjArray holding all good tracks\r
+ TObjArray* tracksAccepted = new TObjArray;\r
+ tracksAccepted->SetOwner(kTRUE);\r
+\r
+ Double_t v_charge;\r
+ Double_t v_eta;\r
+ Double_t v_phi;\r
+ Double_t v_pt;\r
+ \r
+ // Loop over tracks in event\r
+ for (Int_t iTracks = 0; iTracks < event->GetNumberOfTracks(); iTracks++) {\r
+ AliAODTrack* aodTrack = dynamic_cast<AliAODTrack *>(event->GetTrack(iTracks));\r
+ if (!aodTrack) {\r
+ AliError(Form("Could not receive track %d", iTracks));\r
+ continue;\r
+ }\r
+ \r
+ // AOD track cuts\r
+ \r
+ // For ESD Filter Information: ANALYSIS/macros/AddTaskESDfilter.C\r
+ // take only TPC only tracks \r
+ fHistTrackStats->Fill(aodTrack->GetFilterMap());\r
+ if(!aodTrack->TestFilterBit(nAODtrackCutBit)) continue;\r
+ \r
+ v_charge = aodTrack->Charge();\r
+ v_eta = aodTrack->Eta();\r
+ v_phi = aodTrack->Phi() * TMath::RadToDeg();\r
+ v_pt = aodTrack->Pt();\r
+ \r
+ Float_t DCAxy = aodTrack->DCA(); // this is the DCA from global track (not exactly what is cut on)\r
+ Float_t DCAz = aodTrack->ZAtDCA(); // this is the DCA from global track (not exactly what is cut on)\r
+ \r
+ \r
+ // Kinematics cuts from ESD track cuts\r
+ if( v_pt < fPtMin || v_pt > fPtMax) continue;\r
+ if( v_eta < fEtaMin || v_eta > fEtaMax) continue;\r
+ \r
+ // Extra DCA cuts (for systematic studies [!= -1])\r
+ if( fDCAxyCut != -1 && fDCAzCut != -1){\r
+ if(TMath::Sqrt((DCAxy*DCAxy)/(fDCAxyCut*fDCAxyCut)+(DCAz*DCAz)/(fDCAzCut*fDCAzCut)) > 1 ){\r
+ continue; // 2D cut\r
+ }\r
+ }\r
+ \r
+ // Extra TPC cuts (for systematic studies [!= -1])\r
+ if( fTPCchi2Cut != -1 && aodTrack->Chi2perNDF() > fTPCchi2Cut){\r
+ continue;\r
+ }\r
+ if( fNClustersTPCCut != -1 && aodTrack->GetTPCNcls() < fNClustersTPCCut){\r
+ continue;\r
+ }\r
+ \r
+ // fill QA histograms\r
+ fHistClus->Fill(aodTrack->GetITSNcls(),aodTrack->GetTPCNcls());\r
+ fHistDCA->Fill(DCAz,DCAxy);\r
+ fHistChi2->Fill(aodTrack->Chi2perNDF());\r
+ fHistPt->Fill(v_pt);\r
+ fHistEta->Fill(v_eta);\r
+ fHistPhi->Fill(v_phi);\r
+ \r
+ // add the track to the TObjArray\r
+ tracksAccepted->Add(new AliBFBasicParticle(v_eta, v_phi, v_pt, v_charge));\r