AliFlowEventSimple& AliFlowEventSimple::operator=(const AliFlowEventSimple& anEvent)
{
//assignment operator
+ if (&anEvent==this) return *this; //check self-assignment
if (fTrackCollection) fTrackCollection->Delete();
delete fTrackCollection;
fTrackCollection = (TObjArray*)(anEvent.fTrackCollection)->Clone(); //deep copy
//destructor
if (fTrackCollection) fTrackCollection->Delete();
delete fTrackCollection;
- if (fNumberOfTracksWrap) delete fNumberOfTracksWrap;
- if (fNumberOfRPsWrap) delete fNumberOfRPsWrap;
- if (fMCReactionPlaneAngleWrap) delete fMCReactionPlaneAngleWrap;
+ delete fNumberOfTracksWrap;
+ delete fNumberOfRPsWrap;
+ delete fMCReactionPlaneAngleWrap;
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
void AliFlowEventSimple::AddTrack( AliFlowTrackSimple* track )
{
- //add a track
- fTrackCollection->AddLast(track);
+ //add a track, delete the old one if necessary
+ if (fNumberOfTracks < fTrackCollection->GetEntriesFast())
+ {
+ TObject* o = fTrackCollection->At(fNumberOfTracks);
+ if (o) delete o;
+ }
+ fTrackCollection->AddAtAndExpand(track,fNumberOfTracks);
fNumberOfTracks++;
}
vQ.Set(0.,0.);
Int_t iOrder = n;
- Double_t iUsedTracks = 0;
+ Double_t sumOfWeights = 0.;
Double_t dPhi = 0.;
Double_t dPt = 0.;
Double_t dEta = 0.;
dQY += dWeight*wPhi*wPt*wEta*TMath::Sin(iOrder*dPhi);
// weighted multiplicity:
- iUsedTracks += dWeight*wPhi*wPt*wEta;
+ sumOfWeights += dWeight*wPhi*wPt*wEta;
} // end of if (pTrack->InRPSelection())
} // end of if (pTrack)
} // loop over particles
vQ.Set(dQX,dQY);
- vQ.SetMult(iUsedTracks);
+ vQ.SetMult(sumOfWeights);
return vQ;
Double_t dQY = 0.;
Int_t iOrder = n;
- Double_t iUsedTracks = 0;
+ Double_t sumOfWeights = 0.;
Double_t dPhi = 0.;
Double_t dPt = 0.;
Double_t dEta = 0.;
dQY += dWeight*dWphi*dWpt*dWeta*TMath::Sin(iOrder*dPhi);
// weighted multiplicity:
- iUsedTracks+=dWeight*dWphi*dWpt*dWeta;
+ sumOfWeights+=dWeight*dWphi*dWpt*dWeta;
} // end of subevent
} // end of if (pTrack->InRPSelection())
}
} // loop over particles
Qarray[s].Set(dQX,dQY);
- Qarray[s].SetMult(iUsedTracks);
+ Qarray[s].SetMult(sumOfWeights);
//reset
- iUsedTracks = 0;
+ sumOfWeights = 0.;
dQX = 0.;
dQY = 0.;
}
//-----------------------------------------------------------------------
void AliFlowEventSimple::Browse(TBrowser *b)
{
+ //browse in TBrowser
if (!b) return;
if (!fNumberOfTracksWrap)
{
}
//_____________________________________________________________________________
-void AliFlowEventSimple::TagRP( AliFlowTrackSimpleCuts* cuts )
+void AliFlowEventSimple::TagRP( const AliFlowTrackSimpleCuts* cuts )
{
//tag tracks as reference particles (RPs)
for (Int_t i=0; i<fNumberOfTracks; i++)
}
//_____________________________________________________________________________
-void AliFlowEventSimple::TagPOI( AliFlowTrackSimpleCuts* cuts )
+void AliFlowEventSimple::TagPOI( const AliFlowTrackSimpleCuts* cuts )
{
//tag tracks as particles of interest (POIs)
for (Int_t i=0; i<fNumberOfTracks; i++)
for (Int_t i=0; i<fNumberOfTracks; i++)
{
AliFlowTrackSimple* track = static_cast<AliFlowTrackSimple*>(fTrackCollection->At(i));
- if (track->IsDead()) {delete track;ncleaned++;}
+ if (!track) continue;
+ if (track->IsDead()) {delete track;track=NULL;ncleaned++;}
}
fTrackCollection->Compress(); //clean up empty slots
+ fNumberOfTracks-=ncleaned; //update number of tracks
return ncleaned;
}
//return a standard pt spectrum, user has to clean up!
return new TF1("StandardPtSpectrum","x*TMath::Exp(-pow(0.13957*0.13957+x*x,0.5)/0.4)",0.1,10.);
}
+
+//_____________________________________________________________________________
+void AliFlowEventSimple::ClearFast()
+{
+ //clear the counter without deleting allocated objects so they can be reused
+ fReferenceMultiplicity = 0;
+ fNumberOfTracks = 0;
+ fNumberOfRPs = 0;
+ fMCReactionPlaneAngle = 0.0;
+ fMCReactionPlaneAngleIsSet = kFALSE;
+ fAfterBurnerPrecision = 0.001;
+ fUserModified = kFALSE;
+}