#include "AliAODpidUtil.h"
#include "AliAnalysisUtils.h"
+#include "assert.h"
#include "AliGenHijingEventHeader.h"
ClassImp(AliFemtoEventReaderAOD)
// and transfers the neccessary information into
// the internal AliFemtoEvent
- Int_t numberOfLastHijingLabel=0;
-
AliFemtoEvent *tEvent = new AliFemtoEvent();
// setting global event characteristics
if (!mcH) {
cout << "AOD MC information requested, but no header found!" << endl;
}
- else {
- TIter next(mcH->GetCocktailHeaders());
- // Loop over the cocktail headers
- while (const TObject *obj=next()){
- // Check whether it's a Hijing header
- // const AliGenHijingEventHeader* hijingHeader = dynamic_cast<const AliGenHijingEventHeader*>(obj);
- // if(hijingHeader) {
- // numberOfLastHijingLabel=hijingHeader->NProduced()-1;
- // } // End of found the hijing header
- }
- }
mcP = (TClonesArray *) fEvent->FindListObject(AliAODMCParticle::StdBranchName());
if (!mcP) {
}
}
- tEvent->SetReactionPlaneAngle(fEvent->GetHeader()->GetQTheta(0)/2.0);
+ AliAODHeader * header = dynamic_cast<AliAODHeader*>(fEvent->GetHeader());
+ assert(header&&"Not a standard AOD");
+
+ tEvent->SetReactionPlaneAngle(header->GetQTheta(0)/2.0);
// Int_t *motherids=0;
// if (mcP) {
// const int motherTabSize = ((AliAODMCParticle *) mcP->At(mcP->GetEntries()-1))->GetLabel();
if(fMinVtxContr)
anaUtil->SetMinVtxContr(fMinVtxContr);
if(fpA2013)
- if(anaUtil->IsVertexSelected2013pA(fEvent)==kFALSE)
+ if(anaUtil->IsVertexSelected2013pA(fEvent)==kFALSE)
{
delete tEvent;
return NULL; //Vertex rejection for pA analysis.
// looking for global tracks and saving their numbers to copy from them PID information to TPC-only tracks in the main loop over tracks
for (int i=0;i<nofTracks;i++) {
- const AliAODTrack *aodtrack=fEvent->GetTrack(i);
+ const AliAODTrack *aodtrack=dynamic_cast<const AliAODTrack*>(fEvent->GetTrack(i));
+ assert(aodtrack&&"Not a standard AOD");
if (!aodtrack->TestFilterBit(fFilterBit)) {
if(aodtrack->GetID() < 0) continue;
labels[aodtrack->GetID()] = i;
// No additional information exists
// Read in the normal AliAODTracks
- // const AliAODTrack *aodtrack=fEvent->GetTrack(i); // getting the AODtrack directly
- AliAODTrack *aodtrack=fEvent->GetTrack(i); // getting the AODtrack directly
+ // const AliAODTrack *aodtrack=dynamic_cast<AliAODTrack*>(fEvent->GetTrack(i));
+ AliAODTrack *aodtrack=dynamic_cast<AliAODTrack*>(fEvent->GetTrack(i));
+ assert(aodtrack&&"Not a standard AOD"); // getting the AODtrack directly
AliAODTrack *aodtrackpid;
if((fFilterBit == (1 << (7))) || fFilterMask == 128) {//for TPC Only tracks we have to copy PID information from corresponding global tracks
- aodtrackpid = fEvent->GetTrack(labels[-1-fEvent->GetTrack(i)->GetID()]);
+ aodtrackpid = dynamic_cast<AliAODTrack*>(fEvent->GetTrack(labels[-1-fEvent->GetTrack(i)->GetID()]));
}
else {
- aodtrackpid = fEvent->GetTrack(i);
+ aodtrackpid = dynamic_cast<AliAODTrack*>(fEvent->GetTrack(i));
}
+ assert(aodtrackpid&&"Not a standard AOD");
CopyPIDtoFemtoTrack(aodtrackpid, trackCopy);
AliAODTrack* daughterTrackPos = (AliAODTrack*)aodv0->GetDaughter(0); //getting positive daughter track
AliAODTrack* daughterTrackNeg = (AliAODTrack*)aodv0->GetDaughter(1); //getting negative daughter track
- if(!daughterTrackPos) continue; //Daughter tracks must exist
+ if(!daughterTrackPos) continue; //daughter tracks must exist
if(!daughterTrackNeg) continue;
if(daughterTrackNeg->Charge() == daughterTrackPos->Charge() ) continue; //and have different charge
AliAODMCParticle* mcParticlePos = (AliAODMCParticle*)mcP->At(daughterTrackPos->GetLabel());
AliAODMCParticle* mcParticleNeg = (AliAODMCParticle*)mcP->At(daughterTrackNeg->GetLabel() );
if((mcParticlePos!=NULL) && (mcParticleNeg!=NULL)){
- //mcparticle->GetMother() will return a "-1" if the particle doesn't have a true mother (i.e. it's a fake track or primary)
int motherOfPosID = mcParticlePos->GetMother();
int motherOfNegID = mcParticleNeg->GetMother();
if ((motherOfPosID > -1) && (motherOfPosID == motherOfNegID)){
AliFemtoModelHiddenInfo *tInfo = new AliFemtoModelHiddenInfo();
- // Both daughter tracks refer to the same mother. Return the MCParticle index of that mother.
+ // Both daughter tracks refer to the same mother, we can continue
AliAODMCParticle *v0 = (AliAODMCParticle*)mcP->At(motherOfPosID); //our V0 particle
- // if(v0->GetLabel() > numberOfLastHijingLabel ) //if true - the particle is injected
- //continue;
+
tInfo->SetPDGPid(v0->GetPdgCode());
int v0MotherId = v0->GetMother();
- if(v0MotherId>-1) { //particle has a mother
+ if(v0MotherId>-1) { //V0 particle has a mother
AliAODMCParticle* motherOfV0 = (AliAODMCParticle*)mcP->At(v0MotherId);
tInfo->SetMotherPdgCode(motherOfV0->GetPdgCode());
}
Float_t probMisPos = 1.0;
Float_t probMisNeg = 1.0;
- if (tFemtoV0->StatusPos() & AliESDtrack::kTOFpid) { //AliESDtrack::kTOFpid=0x8000
+ if (tFemtoV0->StatusPos() & AliESDtrack::kTOFout & AliESDtrack::kTIME) { //AliESDtrack::kTOFpid=0x8000
probMisPos = fAODpidUtil->GetTOFMismatchProbability(trackpos);
}
- if (tFemtoV0->StatusNeg() & AliESDtrack::kTOFpid) { //AliESDtrack::kTOFpid=0x8000
+ if (tFemtoV0->StatusNeg() & AliESDtrack::kTOFout & AliESDtrack::kTIME) { //AliESDtrack::kTOFpid=0x8000
probMisNeg = fAODpidUtil->GetTOFMismatchProbability(trackneg);
}
- if((tFemtoV0->StatusPos()&AliESDtrack::kTOFpid)==0 || (tFemtoV0->StatusPos()&AliESDtrack::kTIME)==0 || (tFemtoV0->StatusPos()&AliESDtrack::kTOFout)==0 || probMisPos > 0.01)
+ if(// (tFemtoV0->StatusPos()& AliESDtrack::kTOFpid)==0 ||
+ (tFemtoV0->StatusPos()&AliESDtrack::kTIME)==0 || (tFemtoV0->StatusPos()&AliESDtrack::kTOFout)==0 || probMisPos > 0.01)
{
- if((tFemtoV0->StatusNeg()&AliESDtrack::kTOFpid)==0 || (tFemtoV0->StatusNeg()&AliESDtrack::kTIME)==0 || (tFemtoV0->StatusNeg()&AliESDtrack::kTOFout)==0 || probMisNeg > 0.01)
+ if(// (tFemtoV0->StatusNeg()&AliESDtrack::kTOFpid)==0 ||
+ (tFemtoV0->StatusNeg()&AliESDtrack::kTIME)==0 || (tFemtoV0->StatusNeg()&AliESDtrack::kTOFout)==0 || probMisNeg > 0.01)
{
tFemtoV0->SetPosNSigmaTOFK(-1000);
tFemtoV0->SetNegNSigmaTOFK(-1000);
}
else
{
- if(trackpos->IsOn(AliESDtrack::kTOFpid)) {
+ if(trackpos->IsOn(AliESDtrack::kTOFout & AliESDtrack::kTIME)) {
tFemtoV0->SetPosNSigmaTOFK(fAODpidUtil->NumberOfSigmasTOF(trackpos,AliPID::kKaon));
tFemtoV0->SetPosNSigmaTOFP(fAODpidUtil->NumberOfSigmasTOF(trackpos,AliPID::kProton));
tFemtoV0->SetPosNSigmaTOFPi(fAODpidUtil->NumberOfSigmasTOF(trackpos,AliPID::kPion));
}
- if(trackneg->IsOn(AliESDtrack::kTOFpid)) {
+ if(trackneg->IsOn(AliESDtrack::kTOFout & AliESDtrack::kTIME)) {
tFemtoV0->SetNegNSigmaTOFK(fAODpidUtil->NumberOfSigmasTOF(trackneg,AliPID::kKaon));
tFemtoV0->SetNegNSigmaTOFP(fAODpidUtil->NumberOfSigmasTOF(trackneg,AliPID::kProton));
tFemtoV0->SetNegNSigmaTOFPi(fAODpidUtil->NumberOfSigmasTOF(trackneg,AliPID::kPion));
Float_t probMis = 1.0;
//what is that code? for what do we need it? nsigma values are not enough?
- if (tAodTrack->GetStatus() & AliESDtrack::kTOFpid) { //AliESDtrack::kTOFpid=0x8000
+ if (tAodTrack->GetStatus() & AliESDtrack::kTOFout & AliESDtrack::kTIME) { //AliESDtrack::kTOFpid=0x8000
tTOF = tAodTrack->GetTOFsignal();
tAodTrack->GetIntegratedTimes(aodpid);
float nsigmaTOFP=-1000.;
float nsigmaTOFE=-1000.;
- if ((tAodTrack->GetStatus() & AliESDtrack::kTOFpid) && //AliESDtrack::kTOFpid=0x8000
+ if (// (tAodTrack->GetStatus() & AliESDtrack::kTOFpid) &&
+ //AliESDtrack::kTOFpid=0x8000
(tAodTrack->GetStatus() & AliESDtrack::kTOFout) && //AliESDtrack::kTOFout=0x2000
(tAodTrack->GetStatus() & AliESDtrack::kTIME) //AliESDtrack::kTIME=0x80000000
&& probMis < 0.01) // TOF mismatch probaility
{
- if(tAodTrack->IsOn(AliESDtrack::kTOFpid)) //AliESDtrack::kTOFpid=0x8000
+ if(tAodTrack->IsOn(AliESDtrack::kTOFout & AliESDtrack::kTIME)) //AliESDtrack::kTOFpid=0x8000
{
nsigmaTOFPi = fAODpidUtil->NumberOfSigmasTOF(tAodTrack,AliPID::kPion);