+ } // end track loop
+ //
+ // V0 loop -- in beam events the cosmic part of the histogram is filled with GammaConversions
+ //
+ for(Int_t iv0 = 0; iv0 < event->GetNumberOfV0s(); iv0++) {
+ AliESDv0 * v0 = event->GetV0(iv0);
+ if (!v0->GetOnFlyStatus()) continue;
+ if (v0->GetEffMass(0,0) > 0.02) continue; // select low inv. mass
+ Double_t xyz[3];
+ v0->GetXYZ(xyz[0], xyz[1], xyz[2]);
+ if (TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) < 3 || TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) > 30) continue;
+ //
+ // "loop over daughters"
+ //
+ for(Int_t idaughter = 0; idaughter < 2; idaughter++) { // daughter loop
+ Int_t index = idaughter == 0 ? v0->GetPindex() : v0->GetNindex();
+ AliESDtrack * trackP = event->GetTrack(index);
+ AliESDfriendTrack *friendTrackP = esdFriend->GetTrack(index);
+ if (!friendTrackP) continue;
+ const AliExternalTrackParam * trackPIn = trackP->GetInnerParam();
+ const AliExternalTrackParam * trackPOut = friendTrackP->GetTPCOut();
+ if (!trackPIn) continue;
+ if (!trackPOut) continue;
+ // calculate necessary track parameters
+ Double_t meanP = trackPIn->GetP();
+ Double_t meanDrift = 250 - 0.5*TMath::Abs(trackPIn->GetZ() + trackPOut->GetZ());
+ Int_t nclsDeDx = trackP->GetTPCNcls();
+ // exclude tracks which do not look like primaries or are simply too short or on wrong sectors
+ if (nclsDeDx < 60) continue;
+ if (TMath::Abs(trackPIn->GetTgl()) > 1) continue;
+ //
+ TObject *calibObject;
+ AliTPCseed *seed = 0;
+ for (Int_t l=0;(calibObject=friendTrackP->GetCalibObject(l));++l) {
+ if ((seed=dynamic_cast<AliTPCseed*>(calibObject))) break;
+ }
+ if (seed) {
+ if (fLowMemoryConsumption) {
+ if (meanP > 0.5 || meanP < 0.4) continue;
+ meanP = 0.45; // set all momenta to one in order to save memory
+ }
+ Double_t tpcSignal = GetTPCdEdx(seed);
+ //dE/dx, time, type (1-muon cosmic,2-pion beam data), momenta
+ Double_t vec[6] = {tpcSignal,time,1,meanDrift,meanP,runNumber};
+ fHistGainTime->Fill(vec);
+ }
+ }
+