//_____________________________________________________________________
-void AliFMDAnaParameters::GetVertex(AliESDEvent* esd, Double_t* vertexXYZ)
+Bool_t AliFMDAnaParameters::GetVertex(AliESDEvent* esd, Double_t* vertexXYZ)
{
+
const AliESDVertex* vertex = 0;
- vertex = esd->GetPrimaryVertex();
- if(!vertex || (vertex->GetXv() < 0.0001 && vertex->GetYv() < 0.0001 && vertex->GetZv() < 0.0001))
- vertex = esd->GetPrimaryVertexSPD();
- if(!vertex || (vertex->GetXv() < 0.0001 && vertex->GetYv() < 0.0001 && vertex->GetZv() < 0.0001))
- vertex = esd->GetPrimaryVertexTPC();
- if(!vertex || (vertex->GetXv() < 0.0001 && vertex->GetYv() < 0.0001 && vertex->GetZv() < 0.0001))
- vertex = esd->GetVertex();
- if (vertex && (vertex->GetXv() > 0.0001 || vertex->GetYv() > 0.0001 || vertex->GetZv() > 0.0010)) {
+ vertex = esd->GetPrimaryVertexSPD();
+ if(vertex)
vertex->GetXYZ(vertexXYZ);
- return;
- }
- else { //no valid vertex
- vertexXYZ[0] = 0;
- vertexXYZ[1] = 0;
- vertexXYZ[2] = 0;
-
- return;
- }
- return;
+ return vertex->GetStatus();
}
TH1F* hEventsSelected = new TH1F("EventsSelected","EventsSelected",fNvtxBins,0,fNvtxBins);
TH1F* hEventsAll = new TH1F("EventsAll","EventsAll",fNvtxBins,0,fNvtxBins);
+ TH1F* hEventsSelectedVtx = new TH1F("EventsSelectedVtx","EventsSelectedVtx",fNvtxBins,0,fNvtxBins);
+ TH1F* hEventsSelectedTrigger = new TH1F("EventsSelectedTrigger","EventsSelectedTrigger",fNvtxBins,0,fNvtxBins);
+
+
+
// TH1F* hTriggered = new TH1F("Triggered","Triggered",fNvtxBins,0,fNvtxBins);
// TH1F* hTriggeredAll = new TH1F("TriggeredAll","TriggeredAll",fNvtxBins,0,fNvtxBins);
hEventsSelected->Sumw2();
hEventsAll->Sumw2();
fListOfHits.Add(hEventsSelected);
+ fListOfHits.Add(hEventsSelectedVtx);
+ fListOfHits.Add(hEventsSelectedTrigger);
fListOfPrimaries.Add(hEventsAll);
// fListOfHits.Add(hTriggered);
AliESDEvent* esdevent = (AliESDEvent*)InputEvent();
Double_t esdvertex[3];
- pars->GetVertex(esdevent,esdvertex);
+ Bool_t vtxStatus = pars->GetVertex(esdevent,esdvertex);
AliMCParticle* particle = 0;
AliStack* stack = mcevent->Stack();
Int_t vertexBin = (Int_t)vertexBinDouble;
// Vertex determination correction
- TH1F* hEventsSelected = (TH1F*)fListOfHits.FindObject("EventsSelected");
- TH1F* hEventsAll = (TH1F*)fListOfPrimaries.FindObject("EventsAll");
+ TH1F* hEventsSelected = (TH1F*)fListOfHits.FindObject("EventsSelected");
+ TH1F* hEventsSelectedVtx = (TH1F*)fListOfHits.FindObject("EventsSelectedVtx");
+ TH1F* hEventsSelectedTrigger = (TH1F*)fListOfHits.FindObject("EventsSelectedTrigger");
+ TH1F* hEventsAll = (TH1F*)fListOfPrimaries.FindObject("EventsAll");
+
// TH1F* hTriggered = (TH1F*)fListOfHits.FindObject("Triggered");
// TH1F* hTriggeredAll = (TH1F*)fListOfPrimaries.FindObject("TriggeredAll");
Bool_t vtxFound = kTRUE;
- if(esdvertex[0] == 0 && esdvertex[1] == 0 && esdvertex[2] == 0)
+ if(!vtxStatus)
vtxFound = kFALSE;
-
- Bool_t isTriggered = pars->IsEventTriggered(esdevent);
- if(vtxFound && isTriggered) {
- //hTriggered->Fill(vertexBin);
- hEventsSelected->Fill(vertexBin);
- }
+ Bool_t isTriggered = pars->IsEventTriggered(esdevent);
- //if(isTriggered)
+ if(vtxFound && isTriggered) hEventsSelected->Fill(vertexBin);
+ if(vtxFound) hEventsSelectedVtx->Fill(vertexBin);
+ if(isTriggered) hEventsSelectedTrigger->Fill(vertexBin);
+
hEventsAll->Fill(vertexBin);
- //if(vtxFound)
- // hTriggeredAll->Fill(vertexBin);
-
+
for(Int_t i = 0 ;i<nTracks;i++) {
particle = (AliMCParticle*) mcevent->GetTrack(i);
//TH1F* hTriggered = (TH1F*)fListOfHits.FindObject("Triggered");
//TH1F* hTriggeredAll = (TH1F*)fListOfPrimaries.FindObject("TriggeredAll");
- TH1F* hEventsSelected = (TH1F*)fListOfHits.FindObject("EventsSelected");
- TH1F* hEventsAll = (TH1F*)fListOfPrimaries.FindObject("EventsAll");
+ TH1F* hEventsSelected = (TH1F*)fListOfHits.FindObject("EventsSelected");
+ TH1F* hEventsSelectedVtx = (TH1F*)fListOfHits.FindObject("EventsSelectedVtx");
+ TH1F* hEventsSelectedTrigger = (TH1F*)fListOfHits.FindObject("EventsSelectedTrigger");
+ TH1F* hEventsAll = (TH1F*)fListOfPrimaries.FindObject("EventsAll");
// hEventsAll->Divide(hEventsAll,hEventsSelected,1,1,"B");
-
+ hEventsSelectedVtx->Divide(hEventsAll);
+ hEventsSelectedTrigger->Divide(hEventsAll);
for(Int_t i = 1; i<=hEventsSelected->GetNbinsX(); i++) {
if(hEventsSelected->GetBinContent(i) == 0 )
TList* listOfHits = (TList*)infile.Get("Hits");
TList* listOfPrim = (TList*)infile.Get("Primaries");
- TH1F* hEventsSelected = (TH1F*)listOfHits->FindObject("EventsSelected");
- TH1F* hEventsAll = (TH1F*)listOfPrim->FindObject("EventsAll");
+ TH1F* hEventsSelected = (TH1F*)listOfHits->FindObject("EventsSelected");
+ TH1F* hEventsSelectedVtx = (TH1F*)listOfHits->FindObject("EventsSelectedVtx");
+ TH1F* hEventsSelectedTrigger = (TH1F*)listOfHits->FindObject("EventsSelectedTrigger");
+ TH1F* hEventsAll = (TH1F*)listOfPrim->FindObject("EventsAll");
+
fListOfHits.Add(hEventsSelected);
+ fListOfHits.Add(hEventsSelectedVtx);
+ fListOfHits.Add(hEventsSelectedTrigger);
fListOfPrimaries.Add(hEventsAll);
for(Int_t det =1; det<=3;det++)
hBg->GetXaxis()->GetXmax());
hPrimary->Sumw2();
fDiagList->Add(hPrimary);
+ TH1F* hZvtx = new TH1F("hZvtx","z vertex distribution",pars->GetNvtxBins(),-1*pars->GetVtxCutZ(),pars->GetVtxCutZ());
+
+ fDiagList->Add(hZvtx);
+
TH1F* hPrimVertexBin = 0;
TH1F* hHits = 0;
for(Int_t i = 0; i< pars->GetNvtxBins(); i++) {
AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
Double_t vertex[3];
- pars->GetVertex(fESD,vertex);
+ Bool_t vtxStatus = pars->GetVertex(fESD,vertex);
fEsdVertex->SetXYZ(vertex);
// Process primaries here to get true MC distribution
ProcessPrimary();
Bool_t isTriggered = pars->IsEventTriggered(fESD);
-
+
if(!isTriggered) {
fStatus = kFALSE;
return;
}
else
- fStatus = kTRUE;
+ fStatus = kTRUE;
- if(vertex[0] < 0.0001 && vertex[1] < 0.0001 && vertex[2] < 0.0001) {
+ if(!vtxStatus) {
fStatus = kFALSE;
return;
}
else
fStatus = kTRUE;
+ TH1F* hZvtx = (TH1F*)fDiagList->FindObject("hZvtx");
+ hZvtx->Fill(vertex[2]);
+
const AliMultiplicity* testmult = fESD->GetMultiplicity();