]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/RESONANCES/AliRsnAnalysisMonitorTask.cxx
fix for Coverity (B.Hippolyte)
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnAnalysisMonitorTask.cxx
index 0dd224b61aa7d9b6ba34414ed8e604a831e1f8dc..ad5f843eee002b6422319903b60cf398102d370c 100644 (file)
 #include "AliCDBManager.h"
 #include "AliITSPIDResponse.h"
 #include "AliRsnMonitorTrack.h"
+#include "AliRsnDaughter.h"
+#include "AliRsnEvent.h"
 
 #include "AliRsnAnalysisMonitorTask.h"
 
+ClassImp(AliRsnAnalysisMonitorTask)
+
 //__________________________________________________________________________________________________
 AliRsnAnalysisMonitorTask::AliRsnAnalysisMonitorTask(const char *name) :
-  AliAnalysisTaskSE(name),
-  fEventType(2),
-  fNTracks(0),
-  fOut(0x0),
-  fTracks(0x0),
-  fMaxITSband(1E6),
-  fTPCpLimit(0.35),
-  fLargeTPCband(-1E6),
-  fSmallTPCband( 1E6),
-  fESDtrackCutsTPC(),
-  fESDtrackCutsITS(),
-  fESDpid(0x0),
-  fTOFmaker(0x0),
-  fTOFcalib(0x0),
-  fTOFcalibrateESD(kFALSE),
-  fTOFcorrectTExp(kFALSE),
-  fTOFuseT0(kFALSE),
-  fTOFtuneMC(kFALSE),
-  fTOFresolution(0.0)
-  
+   AliAnalysisTaskSE(name),
+   fOut(0x0),
+   fTrack(0x0),
+   fESDpid(0x0),
+   fTOFmaker(0x0),
+   fTOFcalib(0x0),
+   fTOFcalibrateESD(kFALSE),
+   fTOFcorrectTExp(kFALSE),
+   fTOFuseT0(kFALSE),
+   fTOFtuneMC(kFALSE),
+   fTOFresolution(0.0),
+   fEventCuts("eventCuts", AliRsnCut::kEvent),
+   fTrackCuts("trackCuts", AliRsnCut::kDaughter)
+
 {
 //
 // Constructor
 //
 
-  DefineOutput(1, TTree::Class());
+   DefineOutput(1, TTree::Class());
 }
 
 //__________________________________________________________________________________________________
 AliRsnAnalysisMonitorTask::AliRsnAnalysisMonitorTask(const AliRsnAnalysisMonitorTask& copy) :
-  AliAnalysisTaskSE(copy),
-  fEventType(2),
-  fNTracks(0),
-  fOut(0x0),
-  fTracks(0x0),
-  fMaxITSband(copy.fMaxITSband),
-  fTPCpLimit(copy.fTPCpLimit),
-  fLargeTPCband(copy.fLargeTPCband),
-  fSmallTPCband(copy.fSmallTPCband),
-  fESDtrackCutsTPC(copy.fESDtrackCutsTPC),
-  fESDtrackCutsITS(copy.fESDtrackCutsITS),
-  fESDpid(0x0),
-  fTOFmaker(0x0),
-  fTOFcalib(0x0),
-  fTOFcalibrateESD(kFALSE),
-  fTOFcorrectTExp(kFALSE),
-  fTOFuseT0(kFALSE),
-  fTOFtuneMC(kFALSE),
-  fTOFresolution(0.0)
+   AliAnalysisTaskSE(copy),
+   fOut(0x0),
+   fTrack(0x0),
+   fESDpid(0x0),
+   fTOFmaker(0x0),
+   fTOFcalib(0x0),
+   fTOFcalibrateESD(kFALSE),
+   fTOFcorrectTExp(kFALSE),
+   fTOFuseT0(kFALSE),
+   fTOFtuneMC(kFALSE),
+   fTOFresolution(0.0),
+   fEventCuts(copy.fEventCuts),
+   fTrackCuts(copy.fTrackCuts)
 {
 //
 // Copy constructor
@@ -92,22 +84,13 @@ AliRsnAnalysisMonitorTask& AliRsnAnalysisMonitorTask::operator=(const AliRsnAnal
 // Assignment operator
 //
 
-  fMaxITSband = copy.fMaxITSband;
-  
-  fTPCpLimit    = copy.fTPCpLimit;
-  fLargeTPCband = copy.fSmallTPCband;
-  fSmallTPCband = copy.fLargeTPCband;
-  
-  fESDtrackCutsTPC = copy.fESDtrackCutsTPC;
-  fESDtrackCutsITS = copy.fESDtrackCutsITS;
-  
-  fTOFcalibrateESD = copy.fTOFcalibrateESD;
-  fTOFcorrectTExp = copy.fTOFcorrectTExp;
-  fTOFuseT0 = copy.fTOFuseT0;
-  fTOFtuneMC = copy.fTOFtuneMC;
-  fTOFresolution = copy.fTOFresolution;
-
-  return (*this);
+   fTOFcalibrateESD = copy.fTOFcalibrateESD;
+   fTOFcorrectTExp = copy.fTOFcorrectTExp;
+   fTOFuseT0 = copy.fTOFuseT0;
+   fTOFtuneMC = copy.fTOFtuneMC;
+   fTOFresolution = copy.fTOFresolution;
+
+   return (*this);
 }
 
 //__________________________________________________________________________________________________
@@ -117,8 +100,9 @@ AliRsnAnalysisMonitorTask::~AliRsnAnalysisMonitorTask()
 // Destructor
 //
 
-  if (fOut)    delete fOut;
-  if (fESDpid) delete fESDpid;
+   if (fOut)    delete fOut;
+   if (fESDpid) delete fESDpid;
+   if (fTrack)  delete fTrack;
 }
 
 //__________________________________________________________________________________________________
@@ -128,27 +112,22 @@ void AliRsnAnalysisMonitorTask::UserCreateOutputObjects()
 // Create the output data container
 //
 
-  // setup TPC response
-  fESDpid = new AliESDpid;
-  fESDpid->GetTPCResponse().SetBetheBlochParameters(fTPCpar[0], fTPCpar[1], fTPCpar[2], fTPCpar[3], fTPCpar[4]);
-
-  // setup TOF maker & calibration
-  fTOFcalib = new AliTOFcalib;
-  fTOFmaker = new AliTOFT0maker(fESDpid, fTOFcalib);
-  fTOFmaker->SetTimeResolution(fTOFresolution);
-  
-  // initialize all the branch arrays
-  fTracks = new TClonesArray("AliRsnMonitorTrack", 0);
-  
-  // create output tree
-  OpenFile(1);
-  fOut = new TTree("rsnMonitor", "Informations on single tracks for cut checking");
-  
-  // link branches
-  fOut->Branch("ntracks", &fNTracks     , "ntracks/I"   );
-  fOut->Branch("evtype" , &fEventType   , "evtype/I"    );
-  fOut->Branch("vertex" , &fVertex      , "vertex[3]/F");
-  fOut->Branch("tracks" , "TClonesArray", &fTracks      );
+   // setup TPC response
+   fESDpid = new AliESDpid;
+   fESDpid->GetTPCResponse().SetBetheBlochParameters(fTPCpar[0], fTPCpar[1], fTPCpar[2], fTPCpar[3], fTPCpar[4]);
+
+   // setup TOF maker & calibration
+   fTOFcalib = new AliTOFcalib;
+   fTOFmaker = new AliTOFT0maker(fESDpid, fTOFcalib);
+   fTOFmaker->SetTimeResolution(fTOFresolution);
+
+   // create output branch object
+   fTrack = new AliRsnMonitorTrack;
+
+   // create output tree
+   OpenFile(1);
+   fOut = new TTree("rsnMonitor", "Informations on single tracks for cut checking");
+   fOut->Branch("tracks", "AliRsnMonitorTrack", &fTrack);
 }
 
 //__________________________________________________________________________________________________
@@ -163,31 +142,30 @@ void AliRsnAnalysisMonitorTask::UserExec(Option_t *)
 // 3 -- event bad
 //
 
-  static Int_t evNum = 0;
-  evNum++;
-
-  // retrieve ESD event and related stack (if available)
-  AliESDEvent *esd   = dynamic_cast<AliESDEvent*>(fInputEvent);
-  AliStack    *stack = (fMCEvent ? fMCEvent->Stack() : 0x0);
-  
-  // check the event
-  EventEval(esd);
-    
-  // if processable, then process it
-  if      (fEventType == 0) ProcessESD(esd, esd->GetPrimaryVertexTracks(), stack);
-  else if (fEventType == 1) ProcessESD(esd, esd->GetPrimaryVertexSPD()   , stack);
-  else
-  {
-    fTracks->Delete();
-    fTracks->Clear();
-    fNTracks = 0;
-  }
-  
-  // add a new entry in the TTree
-  fOut->Fill();
-  
-  // update histogram container
-  PostData(1, fOut);
+   // retrieve ESD event and related stack (if available)
+   AliESDEvent *esd   = dynamic_cast<AliESDEvent*>(fInputEvent);
+   AliStack    *stack = 0x0;
+
+   // skip NULL events
+   if (!esd) return;
+   if (fMCEvent) stack = fMCEvent->Stack();
+
+   // create interface objects to AliRsnEvent to check event cuts
+   AliRsnEvent event;
+   event.SetRef(esd);
+   event.SetRefMC(fMCEvent);
+   if (!fEventCuts.IsSelected(&event)) return;
+
+   // check the event
+   Int_t type = EventEval(esd);
+
+   // if processable, then process it
+   if (type == 0) ProcessESD(esd, esd->GetPrimaryVertexTracks(), stack);
+   else if (type == 1) ProcessESD(esd, esd->GetPrimaryVertexSPD()   , stack);
+   else return;
+
+   // update histogram container
+   PostData(1, fOut);
 }
 
 //__________________________________________________________________________________________________
@@ -199,43 +177,28 @@ void AliRsnAnalysisMonitorTask::Terminate(Option_t *)
 }
 
 //__________________________________________________________________________________________________
-void AliRsnAnalysisMonitorTask::EventEval(AliESDEvent *esd)
+Int_t AliRsnAnalysisMonitorTask::EventEval(AliESDEvent *esd)
 {
 //
 // Checks if the event is good for analysis.
-// Sets the 'fEventType' flag to:
+// Returns:
 // ---> 0 if a good primary vertex with tracks was found,
 // ---> 1 if a good SPD primary vertex was found
 // ---> 2 otherwise (event to be rejected)
 // In any case, adds an entry to the TTree, to keep trace of all events.
 //
-  
-  // get number of tracks
-  fNTracks = esd->GetNumberOfTracks();
-
-  // get the best primary vertex:
-  // first try that with tracks, then the SPD one
-  const AliESDVertex *vTrk  = esd->GetPrimaryVertexTracks();
-  const AliESDVertex *vSPD  = esd->GetPrimaryVertexSPD();
-  if(vTrk->GetNContributors() > 0)
-  {
-    fVertex[0] = vTrk->GetXv();
-    fVertex[1] = vTrk->GetYv();
-    fVertex[2] = vTrk->GetZv();
-    fEventType = 0;
-  }
-  else if (vSPD->GetNContributors() > 0)
-  {
-    fVertex[0] = vSPD->GetXv();
-    fVertex[1] = vSPD->GetYv();
-    fVertex[2] = vSPD->GetZv();
-    fEventType = 1;
-  }
-  else
-  {
-    fNTracks = 0;
-    fEventType = 2;
-  }
+
+   // get the best primary vertex:
+   // first try that with tracks, then the SPD one
+   const AliESDVertex *vTrk  = esd->GetPrimaryVertexTracks();
+   const AliESDVertex *vSPD  = esd->GetPrimaryVertexSPD();
+   if (vTrk->GetNContributors() > 0) {
+      return 0;
+   } else if (vSPD->GetNContributors() > 0) {
+      return 1;
+   } else {
+      return 2;
+   }
 }
 
 //__________________________________________________________________________________________________
@@ -248,181 +211,129 @@ void AliRsnAnalysisMonitorTask::ProcessESD
 // TClonesArray which is one of the branches of the output TTree.
 //
 
-  // clear array
-  fTracks->Delete();
-  fTracks->Clear();
-  
-  // reject empty events
-  if (!fNTracks) return;
-
-  // ITS stuff #1 
-  // create the response function and initialize it to MC or not
-  // depending if the AliStack object is there or not
-  Bool_t isMC = (stack != 0x0);
-  AliITSPIDResponse itsrsp(isMC);
-
-  // TOF stuff #1: init OCDB
-  Int_t run = esd->GetRunNumber();
-  AliCDBManager *cdb = AliCDBManager::Instance();
-  cdb->SetDefaultStorage("raw://");
-  cdb->SetRun(run);
-  // TOF stuff #2: init calibration
-  fTOFcalib->SetCorrectTExp(fTOFcorrectTExp);
-  fTOFcalib->Init();
-  // TOF stuff #3: calibrate
-  if (fTOFcalibrateESD) fTOFcalib->CalibrateESD(esd);
-  if (fTOFtuneMC) fTOFmaker->TuneForMC(esd);
-  if (fTOFuseT0) 
-  {
-    fTOFmaker->ComputeT0TOF(esd);
-    fTOFmaker->ApplyT0TOF(esd);
-    fESDpid->MakePID(esd, kFALSE, 0.);
-  }
-  // TOF stuff #4: define fixed functions for compatibility range
-  Double_t a1 = 0.01, a2 = -0.03;
-  Double_t b1 = 0.25, b2 =  0.25;
-  Double_t c1 = 0.05, c2 = -0.03;
-  Double_t ymax, ymin;
-  
-  // loop on all tracks
-  Int_t               i, k, size, nITS;
-  Double_t            tpcMaxNSigma, itsdedx[4], tofRef, tofRel;
-  Bool_t              okTOF, okTrack, isTPC, isITSSA, matchedTOF;
-  UChar_t             itsCluMap;
-  Float_t             b[2], bCov[3];
-  AliRsnMonitorTrack  mon;
-  
-  for (i = 0; i < fNTracks; i++)
-  {
-    AliESDtrack *track = esd->GetTrack(i);
-    
-    // skip NULL pointers, kink daughters and tracks which
-    // cannot be propagated to primary vertex
-    if (!track) continue;
-    if ((Int_t)track->GetKinkIndex(0) > 0) continue;
-    if (!track->RelateToVertex(v, esd->GetMagneticField(), kVeryBig)) continue;
-    
-    // reset the output object
-    // 'usable' flag will need to be set to 'ok'
-    mon.Reset();
-    
-    // get MC info if possible
-    if (stack) mon.AdoptMC(TMath::Abs(track->GetLabel()), stack);
-    
-    // copy general info
-    mon.Status() = (UInt_t)track->GetStatus();
-    mon.Length() = (Double_t)track->GetIntegratedLength();
-    mon.Charge() = (Int_t)track->Charge();
-    mon.PrecX()  = (Double_t)track->Px();
-    mon.PrecY()  = (Double_t)track->Py();
-    mon.PrecZ()  = (Double_t)track->Pz();
-    
-    // evaluate some flags from the status to decide what to do next in some points
-    isTPC      = ((mon.Status() & AliESDtrack::kTPCin)  != 0);
-    isITSSA    = ((mon.Status() & AliESDtrack::kTPCin)  == 0 && (mon.Status() & AliESDtrack::kITSrefit) != 0 && (mon.Status() & AliESDtrack::kITSpureSA) == 0 && (mon.Status() & AliESDtrack::kITSpid) != 0);
-    matchedTOF = ((mon.Status() & AliESDtrack::kTOFout) != 0 && (mon.Status() & AliESDtrack::kTIME) != 0);
-    
-    // accept only tracks which are TPC+ITS or ITS standalone
-    if (!isTPC && !isITSSA) continue;
-    
-    // set the track type in the output object
-    mon.ITSsa() = isITSSA;
-
-    // get DCA to primary vertex
-    track->GetImpactParameters(b, bCov);
-    mon.DCAr() = (Double_t)b[0];
-    mon.DCAz() = (Double_t)b[1];
-    
-    // get ITS info
-    track->GetITSdEdxSamples(itsdedx);
-    mon.ITSchi2() = track->GetITSchi2();
-    mon.ITSsignal() = track->GetITSsignal();
-    for (k = 0; k < 6; k++)
-    {
-      mon.ITSmap(k) = track->HasPointOnITSLayer(k);
-      if (k < 4) mon.ITSdedx(k) = itsdedx[k];
-    }
-    
-    // get TPC info
-    if (isTPC)
-    {
-      mon.TPCcount()  = (Int_t)track->GetTPCclusters(0);
-      mon.TPCdedx()   = (Double_t)track->GetTPCsignal();
-      mon.TPCchi2()   = (Double_t)track->GetTPCchi2();
-      mon.TPCnsigma() = fESDpid->NumberOfSigmasTPC(track, AliPID::kKaon);
-      mon.PtpcX()     = mon.PtpcY() = mon.PtpcZ() = 1E10;
-      if (track->GetInnerParam())
-      {
-        mon.PtpcX() = track->GetInnerParam()->Px();
-        mon.PtpcY() = track->GetInnerParam()->Py();
-        mon.PtpcZ() = track->GetInnerParam()->Pz();
-        for (k = 0; k < AliPID::kSPECIES; k++) mon.TPCref(k) = fESDpid->GetTPCResponse().GetExpectedSignal(mon.Ptpc(), (AliPID::EParticleType)k);
+   // create interfacr objects
+   AliRsnEvent    event;
+   AliRsnDaughter daughter;
+   event.SetRef(esd);
+   event.SetRefMC(fMCEvent);
+
+   // ITS stuff #1
+   // create the response function and initialize it to MC or not
+   // depending if the AliStack object is there or not
+   Bool_t isMC = (stack != 0x0);
+   AliITSPIDResponse itsrsp(isMC);
+
+   // TOF stuff #1: init OCDB
+   Int_t run = esd->GetRunNumber();
+   AliCDBManager *cdb = AliCDBManager::Instance();
+   cdb->SetDefaultStorage("raw://");
+   cdb->SetRun(run);
+   // TOF stuff #2: init calibration
+   fTOFcalib->SetCorrectTExp(fTOFcorrectTExp);
+   fTOFcalib->Init();
+   // TOF stuff #3: calibrate
+   if (fTOFcalibrateESD) fTOFcalib->CalibrateESD(esd);
+   if (fTOFtuneMC) fTOFmaker->TuneForMC(esd);
+   if (fTOFuseT0) {
+      fTOFmaker->ComputeT0TOF(esd);
+      fTOFmaker->ApplyT0TOF(esd);
+      fESDpid->MakePID(esd, kFALSE, 0.);
+   }
+
+   // loop on all tracks
+   Int_t               i, k, nITS, ntracks = esd->GetNumberOfTracks();;
+   Bool_t              isTPC, isITSSA, isTOF;
+   Float_t             b[2], bCov[3];
+   Double_t            time[10];
+
+   for (i = 0; i < ntracks; i++) {
+      AliESDtrack *track = esd->GetTrack(i);
+      event.SetDaughter(daughter, i, AliRsnDaughter::kTrack);
+
+      // reset the output object
+      // 'usable' flag will need to be set to 'ok'
+      fTrack->Reset();
+
+      // check cuts
+      fTrack->CutsPassed() = fTrackCuts.IsSelected(&daughter);
+
+      // skip NULL pointers, kink daughters and tracks which
+      // cannot be propagated to primary vertex
+      if (!track) continue;
+      if ((Int_t)track->GetKinkIndex(0) > 0) continue;
+      if (!track->RelateToVertex(v, esd->GetMagneticField(), kVeryBig)) continue;
+
+      // get MC info if possible
+      if (stack) fTrack->AdoptMC(TMath::Abs(track->GetLabel()), stack);
+
+      // copy general info
+      fTrack->Status() = (UInt_t)track->GetStatus();
+      fTrack->Length() = (Double_t)track->GetIntegratedLength();
+      fTrack->Charge() = (Int_t)track->Charge();
+      fTrack->PrecX()  = (Double_t)track->Px();
+      fTrack->PrecY()  = (Double_t)track->Py();
+      fTrack->PrecZ()  = (Double_t)track->Pz();
+
+      // evaluate some flags from the status to decide what to do next in some points
+      isTPC   = ((fTrack->Status() & AliESDtrack::kTPCin)  != 0);
+      isITSSA = ((fTrack->Status() & AliESDtrack::kTPCin)  == 0 && (fTrack->Status() & AliESDtrack::kITSrefit) != 0 && (fTrack->Status() & AliESDtrack::kITSpureSA) == 0 && (fTrack->Status() & AliESDtrack::kITSpid) != 0);
+      isTOF   = ((fTrack->Status() & AliESDtrack::kTOFout) != 0 && (fTrack->Status() & AliESDtrack::kTIME) != 0);
+
+      // accept only tracks which are TPC+ITS or ITS standalone
+      if (isITSSA) {
+         fTrack->ITSsa() = kTRUE;
+         fTrack->TOFok() = kFALSE;
+      } else if (isTPC) {
+         fTrack->ITSsa() = kFALSE;
+         fTrack->TOFok() = isTOF;
+      } else
+         continue;
+
+      // get DCA to primary vertex
+      track->GetImpactParameters(b, bCov);
+      fTrack->DCAr() = (Double_t)b[0];
+      fTrack->DCAz() = (Double_t)b[1];
+
+      // get ITS info
+      for (k = 0; k < 6; k++) {
+         fTrack->ITSmap(k) = track->HasPointOnITSLayer(k);
       }
-    }
-    
-    // get TOF info
-    Double_t time[10];
-    track->GetIntegratedTimes(time);
-    mon.TOFsignal() = (Double_t)track->GetTOFsignal();
-    for (k = 0; k < AliPID::kSPECIES; k++)
-    {
-      mon.TOFref(k)   = time[k];
-      mon.TOFsigma(k) = (Double_t)fTOFmaker->GetExpectedSigma(mon.Prec(), time[k], AliPID::ParticleMass(k));
-    }
-    
-    // if we are here, the track is usable
-    mon.SetUsable();
-    
-    // now check the track against its cuts
-    // and update the flag related to it
-    // first, assume that cuts were passed
-    // and if they aren't, just update the flag accordingly
-    mon.CutsPassed() = kTRUE;
-    if (TMath::Abs(mon.DCAz()) > 3.0) mon.CutsPassed() = kFALSE;
-    
-    if (isTPC)
-    {
-      // check standard ESD cuts
-      if (!fESDtrackCutsTPC.IsSelected(track)) mon.CutsPassed() = kFALSE;
-      
-      // check TPC dE/dx
-      if (mon.Ptpc() > fTPCpLimit) tpcMaxNSigma = fSmallTPCband; else tpcMaxNSigma = fLargeTPCband;
-      if (TMath::Abs(mon.TPCnsigma()) > tpcMaxNSigma) mon.CutsPassed() = kFALSE;
-      
-      // check TOF (only if momentum is large than function asymptote and flags are OK)
-      okTOF = kTRUE;
-      if (matchedTOF && mon.Prec() > TMath::Max(b1, b2))
-      {
-        tofRef = mon.TOFref(AliPID::kKaon);
-        if (tofRef > 0.0)
-        {
-          tofRel   = (mon.TOFsignal() - tofRef) / tofRef;
-          ymax     = a1 / (mon.Prec() - b1) + c1;
-          ymin     = a2 / (mon.Prec() - b2) + c2;
-          okTOF    = (tofRel >= ymin && tofRel <= ymax);
-        }
+      if (isITSSA) {
+         fTrack->ITSchi2() = track->GetITSchi2();
+         fTrack->ITSsignal() = track->GetITSsignal();
+         nITS = fTrack->SSDcount() + fTrack->SDDcount();
+         for (k = 0; k < AliPID::kSPECIES; k++) {
+            fTrack->ITSnsigma(k) = itsrsp.GetNumberOfSigmas(fTrack->Prec(), fTrack->ITSsignal(), (AliPID::EParticleType)k, nITS, kTRUE);
+         }
+      }
+
+      // get TPC info
+      if (isTPC) {
+         fTrack->TPCcount()  = (Int_t)track->GetTPCclusters(0);
+         fTrack->TPCchi2()   = (Double_t)track->GetTPCchi2();
+         fTrack->TPCsignal() = (Double_t)track->GetTPCsignal();
+         fTrack->PtpcX()     = fTrack->PtpcY() = fTrack->PtpcZ() = 1E10;
+         if (track->GetInnerParam()) {
+            fTrack->PtpcX() = track->GetInnerParam()->Px();
+            fTrack->PtpcY() = track->GetInnerParam()->Py();
+            fTrack->PtpcZ() = track->GetInnerParam()->Pz();
+            for (k = 0; k < AliPID::kSPECIES; k++) {
+               fTrack->TPCnsigma(k) = fESDpid->NumberOfSigmasTPC(track, (AliPID::EParticleType)k);
+            }
+         }
       }
-      if (!okTOF) mon.CutsPassed() = kFALSE;
-    }
-    else
-    {
-      // check standard ESD cuts
-      if (!fESDtrackCutsITS.IsSelected(track)) mon.CutsPassed() = kFALSE;
-      
-      // check dE/dx
-      itsCluMap = track->GetITSClusterMap();
-      nITS      = 0;
-      for(k = 2; k < 6; k++) if(itsCluMap & (1 << k)) ++nITS;
-      if (nITS < 3) okTrack = kFALSE; // track not good for PID
-      mon.ITSnsigma() = itsrsp.GetNumberOfSigmas(mon.Prec(), mon.ITSsignal(), AliPID::kKaon, nITS, kTRUE);
-      if (TMath::Abs(mon.ITSnsigma()) > fMaxITSband) mon.CutsPassed() = kFALSE;
-    }
-    
-    // collect only tracks which are declared usable
-    if (mon.IsUsable())
-    {
-      size = (Int_t)fTracks->GetEntriesFast();
-      new ((*fTracks)[size]) AliRsnMonitorTrack(mon);
-    }
-  }
+
+      // get TOF info
+      if (isTOF) {
+         track->GetIntegratedTimes(time);
+         fTrack->TOFsignal() = (Double_t)track->GetTOFsignal();
+         for (k = 0; k < AliPID::kSPECIES; k++) {
+            fTrack->TOFref(k)   = time[k];
+            fTrack->TOFsigma(k) = (Double_t)fTOFmaker->GetExpectedSigma(fTrack->Prec(), time[k], AliPID::ParticleMass(k));
+         }
+      }
+
+      // add entry to TTree
+      fOut->Fill();
+   }
 }