-////////////////////////////////////////////////////////////////////////
-Int_t AliGenInfoMaker::TreeTRLoop()
-{
- //
- // loop over TrackReferences and store the first one for each track
- //
- TTree * treeTR = fTreeTR;
- Int_t nPrimaries = (Int_t) treeTR->GetEntries();
- if (fDebug > 1) cout<<"There are "<<nPrimaries<<" entries in TreeTR"<<endl;
- //
- //
- //track references for TPC
- TClonesArray* tpcArrayTR = new TClonesArray("AliTrackReference");
- TClonesArray* itsArrayTR = new TClonesArray("AliTrackReference");
- TClonesArray* trdArrayTR = new TClonesArray("AliTrackReference");
- TClonesArray* tofArrayTR = new TClonesArray("AliTrackReference");
- TClonesArray* runArrayTR = new TClonesArray("AliTrackReference");
- //
- if (treeTR->GetBranch("TPC")) treeTR->GetBranch("TPC")->SetAddress(&tpcArrayTR);
- if (treeTR->GetBranch("ITS")) treeTR->GetBranch("ITS")->SetAddress(&itsArrayTR);
- if (treeTR->GetBranch("TRD")) treeTR->GetBranch("TRD")->SetAddress(&trdArrayTR);
- if (treeTR->GetBranch("TOF")) treeTR->GetBranch("TOF")->SetAddress(&tofArrayTR);
- if (treeTR->GetBranch("AliRun")) treeTR->GetBranch("AliRun")->SetAddress(&runArrayTR);
- //
- //
- //
- for (Int_t iPrimPart = 0; iPrimPart<nPrimaries; iPrimPart++) {
- treeTR->GetEntry(iPrimPart);
- //
- // Loop over TPC references
- //
- for (Int_t iTrackRef = 0; iTrackRef < tpcArrayTR->GetEntriesFast(); iTrackRef++) {
- AliTrackReference *trackRef = (AliTrackReference*)tpcArrayTR->At(iTrackRef);
- //
- if (trackRef->TestBit(BIT(2))){
- //if decay
- if (trackRef->P()<fTPCPtCut) continue;
- Int_t label = trackRef->GetTrack();
- AliMCInfo * info = GetInfo(label);
- if (!info) info = MakeInfo(label);
- info->fTRdecay = *trackRef;
- }
- //
- if (trackRef->P()<fTPCPtCut) continue;
- Int_t label = trackRef->GetTrack();
- AliMCInfo * info = GetInfo(label);
- if (!info) info = MakeInfo(label);
- if (!info) continue;
- info->fPrimPart = iPrimPart;
- TClonesArray & arr = *(info->fTPCReferences);
- new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);
- }
- //
- // Loop over ITS references
- //
- for (Int_t iTrackRef = 0; iTrackRef < itsArrayTR->GetEntriesFast(); iTrackRef++) {
- AliTrackReference *trackRef = (AliTrackReference*)itsArrayTR->At(iTrackRef);
- //
- //
- if (trackRef->P()<fTPCPtCut) continue;
- Int_t label = trackRef->GetTrack();
- AliMCInfo * info = GetInfo(label);
- if ( (!info) && trackRef->Pt()<fITSPtCut) continue;
- if (!info) info = MakeInfo(label);
- if (!info) continue;
- info->fPrimPart = iPrimPart;
- TClonesArray & arr = *(info->fITSReferences);
- new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);
- }
- //
- // Loop over TRD references
- //
- for (Int_t iTrackRef = 0; iTrackRef < trdArrayTR->GetEntriesFast(); iTrackRef++) {
- AliTrackReference *trackRef = (AliTrackReference*)trdArrayTR->At(iTrackRef);
- //
- if (trackRef->P()<fTRDPtCut) continue;
- Int_t label = trackRef->GetTrack();
- AliMCInfo * info = GetInfo(label);
- if ( (!info) && trackRef->Pt()<fTRDPtCut) continue;
- if (!info) info = MakeInfo(label);
- if (!info) continue;
- info->fPrimPart = iPrimPart;
- TClonesArray & arr = *(info->fTRDReferences);
- new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);
- }
- //
- // Loop over TOF references
- //
- for (Int_t iTrackRef = 0; iTrackRef < tofArrayTR->GetEntriesFast(); iTrackRef++) {
- AliTrackReference *trackRef = (AliTrackReference*)tofArrayTR->At(iTrackRef);
- Int_t label = trackRef->GetTrack();
- AliMCInfo * info = GetInfo(label);
- if (!info){
- if (trackRef->Pt()<fTPCPtCut) continue;
- if ( (!info) && trackRef->Pt()<fTOFPtCut) continue;
- }
- if (!info) info = MakeInfo(label);
- if (!info) continue;
- info->fPrimPart = iPrimPart;
- TClonesArray & arr = *(info->fTOFReferences);
- new (arr[arr.GetEntriesFast()]) AliTrackReference(*trackRef);
- }
- //
- //
- // get dacay position
- //
- for (Int_t iTrackRef = 0; iTrackRef < runArrayTR->GetEntriesFast(); iTrackRef++) {
- AliTrackReference *trackRef = (AliTrackReference*)runArrayTR->At(iTrackRef);
- //
- Int_t label = trackRef->GetTrack();
- AliMCInfo * info = GetInfo(label);
- if (!info) continue;
- if (!trackRef->TestBit(BIT(2))) continue; //if not decay
- // if (TMath::Abs(trackRef.X());
- info->fTRdecay = *trackRef;
- }
- }
- //
- tpcArrayTR->Delete();
- delete tpcArrayTR;
- trdArrayTR->Delete();
- delete trdArrayTR;
- tofArrayTR->Delete();
- delete tofArrayTR;
- itsArrayTR->Delete();
- delete itsArrayTR;
- runArrayTR->Delete();
- delete runArrayTR;
- //
- return TreeTRLoopNew();
-}
-
-
-