/**
 *    file CbmKresEtaMCAnalysis.cxx
 *
 *    author Ievgenii Kres
 *    date 27.03.2018
 *
 **/

#include "CbmKresEtaMCAnalysis.h"

#include "CbmMCTrack.h"

#include "FairRootManager.h"
#include "FairLogger.h"
#include "FairRunSim.h"

#include <iostream>

using namespace std;

CbmKresEtaMCAnalysis::CbmKresEtaMCAnalysis()
  : FairTask()
  , fMcTracks(NULL)
  , fApp(NULL)
{

}

CbmKresEtaMCAnalysis::~CbmKresEtaMCAnalysis()
{

}

InitStatus CbmKresEtaMCAnalysis::Init()
{

  FairRunSim* sim = FairRunSim::Instance();
  if (sim) { 
    LOG(INFO) << "Getting fAPP pointer." << FairLogger::endl;
    fApp = FairMCApplication::Instance();
  }

  FairRootManager* ioman = FairRootManager::Instance();
  if (NULL == ioman) { 
    LOG(FATAL) << "RootManager not instantised!"
               << FairLogger::endl;
  }

  fMcTracks = (TClonesArray*) ioman->GetObject("MCTrack");
  if ( NULL == fMcTracks) { 
    LOG(FATAL) << "No MCTrack array!"
               << FairLogger::endl;
  }

  return kSUCCESS;
     
}


void CbmKresEtaMCAnalysis::Exec(Option_t*)
{
  int counter = 0;
  Int_t nofMcTracks = fMcTracks->GetEntriesFast();
  for (int i = 0; i < nofMcTracks; i++) {
    CbmMCTrack* mctrack = (CbmMCTrack*)fMcTracks->At(i);
    if (mctrack == NULL) continue;
    if (mctrack->GetPdgCode() == 221) counter++; 
  }

  LOG(INFO) << "CbmKresEtaMCAnalysis, event with "
            << counter << " etas" << FairLogger::endl;

  if (fApp && counter >= 15) {
    LOG(WARNING) << "To much etas. Don't save this event." 
                 << FairLogger::endl;
    fApp->SetSaveThisEvent(kFALSE);
  }

} 


void CbmKresEtaMCAnalysis::Finish()
{
}

