+Int_t AliGenHBTprocessor::GetNumberOfTracks()
+{
+ AliGenerator* g = gAlice->Generator();
+ AliGenCocktailAfterBurner* cab = (g)?dynamic_cast<AliGenCocktailAfterBurner*>(g):0x0;
+ if (cab == 0x0)
+ {
+ Fatal("GetNumberOfEvents","Master Generator is not an AliGenCocktailAfterBurner");
+ return 0;
+ }
+ Int_t n = 0;
+ for (Int_t i = fActiveStack;i < fActiveStack+fEventMerge; i++)
+ {
+ if (i >= GetNumberOfEvents()) break; //protection not to overshoot nb of events
+ AliStack* stack = cab->GetStack(i);
+ if (stack == 0x0)
+ Error("GetNumberOfTracks","There is no stack %d",i);
+
+ n+=stack->GetNprimary();
+ }
+ return n;
+}
+/*******************************************************************/
+
+void AliGenHBTprocessor::SetNEventsToMerge(Int_t nev)
+{
+ if (nev > 0 ) fEventMerge = nev;
+}
+/*******************************************************************/
+
+TParticle* AliGenHBTprocessor::GetTrack(Int_t n)
+{
+//returns track that hbtp thinks is n in active event
+ if (fgDebug > 5) Info("GetTrack","n = %d",n);
+ AliGenerator* g = gAlice->Generator();
+ AliGenCocktailAfterBurner* cab = (g)?dynamic_cast<AliGenCocktailAfterBurner*>(g):0x0;
+ if (cab == 0x0)
+ {
+ Fatal("GetTrackEventIndex","Master Generator is not an AliGenCocktailAfterBurner");
+ return 0;
+ }
+
+ Int_t ev, idx;
+ GetTrackEventIndex(n,ev,idx);
+ if (fgDebug > 5) Info("GetTrack","Event = %d Particle = %d",ev,idx);
+ if ( (ev<0) || (idx<0) )
+ {
+ Error("GetTrack","GetTrackEventIndex returned error");
+ return 0x0;
+ }
+ if (fgDebug > 5) Info("GetTrack","Number of Tracks in Event(%d) = %d",ev,cab->GetStack(ev)->GetNprimary());
+ return cab->GetStack(ev)->Particle(idx);//safe - in case stack does not exist
+}
+/*******************************************************************/
+
+void AliGenHBTprocessor::GetTrackEventIndex(Int_t n, Int_t &evno, Int_t &index) const
+{
+ //returns event(stack) number and particle index
+ AliGenerator* g = gAlice->Generator();
+ AliGenCocktailAfterBurner* cab = (g)?dynamic_cast<AliGenCocktailAfterBurner*>(g):0x0;
+ if (cab == 0x0)
+ {
+ Fatal("GetTrackEventIndex","Master Generator is not an AliGenCocktailAfterBurner");
+ return;
+ }
+
+ evno = -1;
+ index = -1;
+ for (Int_t i = fActiveStack;i < fActiveStack+fEventMerge; i++)
+ {
+ AliStack* stack = cab->GetStack(i);
+ if (stack == 0x0)
+ {
+ Error("GetTrackEventIndex","There is no stack %d",i);
+ return;
+ }
+
+ Int_t ntracks = stack->GetNprimary();
+ if (fgDebug > 10) Info("GetTrackEventIndex","Event %d has %d tracks. n = %d",i,ntracks,n);
+
+ if ( ntracks > n)
+ {
+ evno = i;
+ index = n;
+ return ;
+ }
+ else
+ {
+ n-=ntracks;
+ continue;
+ }
+ }
+ Error("GetTrackEventIndex","Could not find given track");
+}
+
+/*******************************************************************/
+/*******************************************************************/
+/*******************************************************************/