#ifndef PndScrutAnaTask_H
#define PndScrutAnaTask_H 1


#include "FairTask.h"
#include <map>
#include <string>
#include "TLorentzVector.h"

class TClonesArray;
class TH1F;
class TH2F;
class TDatabasePDG;

class RhoMassParticleSelector;
class PndAnalysis;
class RhoCandList;
class RhoCandidate;
class RhoTuple;
class PndRhoTupleQA;



class PndScrutAnaTask : public FairTask
{

 public:
	
	// ** Default constructor   
	PndScrutAnaTask(double pbarmom, TString outname, TString mode, double pidcut, bool fast, bool fit, bool save);
	
	// ** Destructor 
	~PndScrutAnaTask();	
	
	// ** Virtual method Init 
	virtual InitStatus Init();
	
	// ** Virtual method Exec 
	virtual void Exec(Option_t* opt);
	
	virtual void Finish();

 protected:
	
	
 private: 
	// *** event counter
	int fEvtCount;	
	
	// *** the initial 4-vector
	TLorentzVector fIni;
	
	// *** the PndAnalysis object
	PndAnalysis   *fAnalysis;
	TDatabasePDG  *fPdg;
	TFile 		  *fFile;
	TString		  fOutName;
	TString		  fAnaName;
        bool fFast;
        bool fFit;
	bool fSave;

	double fIniPidCut;
	
	int SelectPidProb(RhoCandList &l, int pididx, double cut);

	// *******
	// ******* DECLARE THE STUFF YOU NEED	
	// *******	
	TH1F *hpi0_mass_all      ;	
	TH1F *hpi0_mass_ftm      ;	
	TH1F *hpi0_mass_nm       ;	
	TH1F *hpi0_open_ang      ;
	
	TH1F *hgamma_theta_res      ;	
	TH1F *hgamma_phi_res      ;	
	TH1F *hgamma_energy_res      ;	
	
	TH1F *hmuon_theta_res      ;	
	TH1F *hmuon_phi_res      ;	
	TH1F *hmuon_energy_res      ;	

	TH1F *hks0_mass_all      ;	
	TH1F *hks0_mass_ftm      ;	
	TH1F *hks0_mass_nm       ;	
		
	TH1F *hpsi_counter      ;	
	

	TH1F *hdp_mass_all      ;	
	TH1F *hdp_mass_ftm      ;	
	TH1F *hdp_mass_nm       ;	
	TH1F *hdp_miss_all      ;	
	TH1F *hdp_miss_ftm      ;	
	TH1F *hdp_miss_nm       ;	
	TH1F *hdm_mass_all      ;	
	TH1F *hdm_mass_ftm      ;	
	TH1F *hdm_mass_nm       ;	


	TH1F *hdp_mass_all_pi1      ;	
	TH1F *hdp_mass_ftm_pi1     ;	
	TH1F *hdp_mass_all_pi2      ;	
	TH1F *hdp_mass_ftm_pi2      ;
	TH1F *hdp_mass_all_pi3      ;	
	TH1F *hdp_mass_ftm_pi3      ;
	TH1F *hdp_mass_all_pi4      ;	
	TH1F *hdp_mass_ftm_pi4      ;
	TH1F *hdp_mass_all_pi5      ;	
	TH1F *hdp_mass_ftm_pi5      ;
	TH1F *hdp_mass_all_pi6      ;	
	TH1F *hdp_mass_ftm_pi6      ;
	TH1F *hdp_mass_all_pi7      ;	
	TH1F *hdp_mass_ftm_pi7      ;
	
	TH1F *hdm_mass_all_pi1      ;	
	TH1F *hdm_mass_ftm_pi1     ;	
	TH1F *hdm_mass_all_pi2      ;	
	TH1F *hdm_mass_ftm_pi2      ;
	TH1F *hdm_mass_all_pi3      ;	
	TH1F *hdm_mass_ftm_pi3      ;
	TH1F *hdm_mass_all_pi4      ;	
	TH1F *hdm_mass_ftm_pi4      ;
	TH1F *hdm_mass_all_pi5      ;	
	TH1F *hdm_mass_ftm_pi5      ;
	TH1F *hdm_mass_all_pi6      ;	
	TH1F *hdm_mass_ftm_pi6      ;
	TH1F *hdm_mass_all_pi7      ;	
	TH1F *hdm_mass_ftm_pi7      ;


				
	TH1F *hdp_kin_vtxx	;
	TH1F *hdp_kin_vtxy	;
	TH1F *hdp_kin_vtxz	;
	TH1F *hdm_kin_vtxx	;
	TH1F *hdm_kin_vtxy	;
	TH1F *hdm_kin_vtxz	;
	
	
	
	
    TH2F *hdp_mct_dalitz_2D_1;	
	TH2F *hdp_mct_dalitz_2D_2;	
    TH2F *hdp_mct_dalitz_2D_3;	
	TH1F *hdp_mct_dalitz_1;
	TH1F *hdp_mct_dalitz_2;
	TH1F *hdp_mct_dalitz_3;
		
    TH2F *hdm_mct_dalitz_2D_1;	
	TH2F *hdm_mct_dalitz_2D_2;	
    TH2F *hdm_mct_dalitz_2D_3;	
	TH1F *hdm_mct_dalitz_1;
	TH1F *hdm_mct_dalitz_2;
	TH1F *hdm_mct_dalitz_3;	
	
	TH1F *hdp_mct_open;
	TH1F *hdp_mct_theta0;
	TH1F *hdp_mct_theta1;
	TH1F *hdp_mct_theta2;
	TH2F *hdp_mct_theta2D;
	TH1F *hdp_mct_mom0;
	TH1F *hdp_mct_mom1;
	TH1F *hdp_mct_mom2;
	TH1F *hdp_mct_pt0;
	TH1F *hdp_mct_pt1;
	TH1F *hdp_mct_pt2;
	TH1F *hdp_mct_phi;
	TH2F *hdp_mct_phi2D;
	TH2F *hdp_mct_arm;
	TH1F *hdp_mct_cos1;
	TH1F *hdp_mct_cos2;
	TH1F *hdp_mct_cos3;
	TH1F *hdp_mct_phi1;
	TH1F *hdp_mct_phi2;
	TH1F *hdp_mct_phi3;

	TH1F *hdp_mct_pi0_p;
	TH1F *hdp_mct_pi0_tht;
	TH1F *hdp_mct_pi0_pt;
	TH1F *hdp_mct_pi0_open;

	TH1F *hdm_mct_open;
	TH1F *hdm_mct_theta0;
	TH1F *hdm_mct_theta1;
	TH1F *hdm_mct_theta2;
	TH2F *hdm_mct_theta2D;
	TH1F *hdm_mct_mom0;
	TH1F *hdm_mct_mom1;
	TH1F *hdm_mct_mom2;
	TH1F *hdm_mct_pt0;
	TH1F *hdm_mct_pt1;
	TH1F *hdm_mct_pt2;
	TH1F *hdm_mct_phi;
	TH2F *hdm_mct_phi2D;
	TH2F *hdm_mct_arm;
	TH1F *hdm_mct_cos1;
	TH1F *hdm_mct_cos2;
	TH1F *hdm_mct_cos3;
	TH1F *hdm_mct_phi1;
	TH1F *hdm_mct_phi2;
	TH1F *hdm_mct_phi3;


	
	
	
		
    TH2F *hdp_kin_dalitz_2D_1;	
	TH2F *hdp_kin_dalitz_2D_2;	
    TH2F *hdp_kin_dalitz_2D_3;	
	TH1F *hdp_kin_dalitz_1;
	TH1F *hdp_kin_dalitz_2;
	TH1F *hdp_kin_dalitz_3;
		

	TH1F *hdp_kin_open;
	TH1F *hdp_kin_cos1;
	TH1F *hdp_kin_cos2;
	TH1F *hdp_kin_cos3;
	TH1F *hdp_kin_phi1;
	TH1F *hdp_kin_phi2;
	TH1F *hdp_kin_phi3;

		
	TH1F *hdp_kin_phi	;
	TH2F *hdp_kin_phi2D	;
	TH2F *hdp_kin_arm	;
	TH2F *hdp_kin_theta2D	;

	TH1F *hdp_kin_dp	;
	TH1F *hdp_kin_dtht	;
	TH1F *hdp_kin_dphi	;
	TH1F *hdp_kin_dpt	;
	TH1F *hdp_kin_kp	;
	TH1F *hdp_kin_ktht	;
	TH1F *hdp_kin_kphi	;
	TH1F *hdp_kin_kpt	;
	TH1F *hdp_kin_kpid	;
	TH1F *hdp_kin_kpcm	;
	TH1F *hdp_kin_kthtcm	;
	TH1F *hdp_kin_p1p	;
	TH1F *hdp_kin_p1tht     ;
	TH1F *hdp_kin_p1phi	;
	TH1F *hdp_kin_p1pt	;
	TH1F *hdp_kin_p1pid	;
	TH1F *hdp_kin_p1pcm	;
	TH1F *hdp_kin_p1thtcm	;			
	TH1F *hdp_kin_p2p	;
	TH1F *hdp_kin_p2tht	;
	TH1F *hdp_kin_p2phi	;
	TH1F *hdp_kin_p2pt      ;
	TH1F *hdp_kin_p2pid	;
	TH1F *hdp_kin_p2pcm	;
	TH1F *hdp_kin_p2thtcm	; 
	
	TH2F *hdp_kin_ecal_E_2D	  ;
	TH1F *hdp_kin_ecal_crystal;
	TH1F *hdp_kin_muon_layer  ;
	TH1F *hdp_kin_muon_prob	  ;
	TH1F *hdp_kin_muon_hits	  ;
	TH1F *hdp_kin_muon_iron	  ;
	TH2F *hdp_kin_muon_iron2D ;







    TH2F *hdm_kin_dalitz_2D_1;	
	TH2F *hdm_kin_dalitz_2D_2;	
    TH2F *hdm_kin_dalitz_2D_3;	
	TH1F *hdm_kin_dalitz_1;
	TH1F *hdm_kin_dalitz_2;
	TH1F *hdm_kin_dalitz_3;	
	
	TH1F *hdm_kin_open;
	TH1F *hdm_kin_cos1;
	TH1F *hdm_kin_cos2;
	TH1F *hdm_kin_cos3;
	TH1F *hdm_kin_phi1;
	TH1F *hdm_kin_phi2;
	TH1F *hdm_kin_phi3;

	TH1F *hdm_kin_phi	;
	TH2F *hdm_kin_phi2D	;
	TH2F *hdm_kin_arm	;
	TH2F *hdm_kin_theta2D	;

	TH1F *hdm_kin_dp	;
	TH1F *hdm_kin_dtht	;
	TH1F *hdm_kin_dphi	;
	TH1F *hdm_kin_dpt	;
	TH1F *hdm_kin_kp	;
	TH1F *hdm_kin_ktht	;
	TH1F *hdm_kin_kphi	;
	TH1F *hdm_kin_kpt	;
	TH1F *hdm_kin_kpid	;
	TH1F *hdm_kin_kpcm	;
	TH1F *hdm_kin_kthtcm	;
	TH1F *hdm_kin_p1p	;
	TH1F *hdm_kin_p1tht     ;
	TH1F *hdm_kin_p1phi	;
	TH1F *hdm_kin_p1pt	;
	TH1F *hdm_kin_p1pid	;
	TH1F *hdm_kin_p1pcm	;
	TH1F *hdm_kin_p1thtcm	;			
	TH1F *hdm_kin_p2p	;
	TH1F *hdm_kin_p2tht	;
	TH1F *hdm_kin_p2phi	;
	TH1F *hdm_kin_p2pt      ;
	TH1F *hdm_kin_p2pid	;
	TH1F *hdm_kin_p2pcm	;
	TH1F *hdm_kin_p2thtcm	; 


	

	TH1F *hdp_fit_vtx_all;	
	TH1F *hdp_fit_mass_all;	
	TH1F *hdp_fit_prg_all;	
	TH1F *hdp_fit_vtx_ftm;	
	TH1F *hdp_fit_mass_ftm;	
	TH1F *hdp_fit_prg_ftm;	
	TH1F *hdm_fit_vtx_all;	
	TH1F *hdm_fit_mass_all;	
	TH1F *hdm_fit_prg_all;	
	TH1F *hdm_fit_vtx_ftm;	
	TH1F *hdm_fit_mass_ftm;	
	TH1F *hdm_fit_prg_ftm;	

	TH1F *hdp_fit_mass_all2;	
	TH1F *hdp_fit_mass_ftm2;	
	TH1F *hdm_fit_mass_all2;	
	TH1F *hdm_fit_mass_ftm2;	
	
	TH1F *hdp_fit_mass_chi2_all;	
	TH1F *hdp_fit_mass_prob_all;	
	TH1F *hdm_fit_mass_chi2_all;	
	TH1F *hdm_fit_mass_prob_all;	

   	TH1F *hdp_fit_mass_chi2_ftm;	
	TH1F *hdp_fit_mass_prob_ftm;	
	TH1F *hdm_fit_mass_chi2_ftm;	
	TH1F *hdm_fit_mass_prob_ftm;
	
	TH1F *hdp_fit_mass_chi2_zoom_all;	
	TH1F *hdp_fit_mass_chi2_zoom_ftm;	

	
	
	
	
	
	TH1F *hpsi_mct_open;   

    TH1F *hpsi_mass_all     ;	
	TH1F *hpsi_mass_ftm     ;	
	TH1F *hpsi_mass_nm      ;	
   
	TH1F *hpsi_kin_open		;
	TH1F *hpsi_kin_phi		;
	TH2F *hpsi_kin_phi2D	;
	TH1F *hpsi_kin_cos		;

	TH1F *hpsi_kin_psi_p	;
	TH1F *hpsi_kin_psi_tht	;
	TH1F *hpsi_kin_psi_phi	;
	TH1F *hpsi_kin_psi_pt	;



		TH1F *hpsi_fit_4c_mass_psi_all;	
		TH1F *hpsi_fit_4c_mass_dp_all;	
		TH1F *hpsi_fit_4c_mass_dm_all;	
		TH1F *hpsi_fit_4c_chi2_all ;
		TH1F *hpsi_fit_4c_prob_all ;
		
		TH1F *hpsi_fit_4c_mass_psi_ftm;	
		TH1F *hpsi_fit_4c_mass_dp_ftm;	
		TH1F *hpsi_fit_4c_mass_dm_ftm;	
		TH1F *hpsi_fit_4c_chi2_ftm ;
		TH1F *hpsi_fit_4c_prob_ftm ;
		
		TH1F *hpsi_fit_m_mass_psi_all;	
		TH1F *hpsi_fit_m_mass_dp_all;	
		TH1F *hpsi_fit_m_mass_dm_all;	
		TH1F *hpsi_fit_m_chi2_all ;
		TH1F *hpsi_fit_m_prob_all ;
		
		TH1F *hpsi_fit_m_mass_psi_ftm;	
		TH1F *hpsi_fit_m_mass_dp_ftm;	
		TH1F *hpsi_fit_m_mass_dm_ftm;	
		TH1F *hpsi_fit_m_chi2_ftm ;
		TH1F *hpsi_fit_m_prob_ftm ;
		
		TH1F *hpsi_fit_m_chi2_zoom_all ;
		TH1F *hpsi_fit_m_chi2_zoom_ftm ;

		TH1F *hpsi_final1_mass_dp_all;
		TH1F *hpsi_final1_mass_dm_all;
		TH1F *hpsi_final1_mass_dp_ftm;
		TH1F *hpsi_final1_mass_dm_ftm;
		TH1F *hpsi_final2_mass_dp_all;
		TH1F *hpsi_final2_mass_dm_all;
		TH1F *hpsi_final2_mass_dp_ftm;
		TH1F *hpsi_final2_mass_dm_ftm;
		TH1F *hpsi_final3_mass_dp_all;
		TH1F *hpsi_final3_mass_dm_all;
		TH1F *hpsi_final3_mass_dp_ftm;
		TH1F *hpsi_final3_mass_dm_ftm;
		TH1F *hpsi_final4_mass_dp_all;
		TH1F *hpsi_final4_mass_dm_all;
		TH1F *hpsi_final4_mass_dp_ftm;
		TH1F *hpsi_final4_mass_dm_ftm;
		TH1F *hpsi_final5_mass_dp_all;
		TH1F *hpsi_final5_mass_dm_all;
		TH1F *hpsi_final5_mass_dp_ftm;
		TH1F *hpsi_final5_mass_dm_ftm;
		TH1F *hpsi_final6_mass_dp_all;
		TH1F *hpsi_final6_mass_dm_all;
		TH1F *hpsi_final6_mass_dp_ftm;
		TH1F *hpsi_final6_mass_dm_ftm;
		TH1F *hpsi_final7_mass_dp_all;
		TH1F *hpsi_final7_mass_dm_all;
		TH1F *hpsi_final7_mass_dp_ftm;
		TH1F *hpsi_final7_mass_dm_ftm;
		TH1F *hpsi_final8_mass_dp_all;
		TH1F *hpsi_final8_mass_dm_all;
		TH1F *hpsi_final8_mass_dp_ftm;
		TH1F *hpsi_final8_mass_dm_ftm;
		TH1F *hpsi_final9_mass_dp_all;
		TH1F *hpsi_final9_mass_dm_all;
		TH1F *hpsi_final9_mass_dp_ftm;
		TH1F *hpsi_final9_mass_dm_ftm;
		
		TH1F *hpsi_final0_mass_dp_all;
		TH1F *hpsi_final0_mass_dm_all;
		TH1F *hpsi_final0_mass_dp_ftm;
		TH1F *hpsi_final0_mass_dm_ftm;	
		
		
		


	
	
						
	RhoTuple *ntp1;
	RhoTuple *ntp2;
	RhoTuple *ntp3;
	RhoTuple *ntp4;
	RhoTuple *ntp5;
	RhoTuple *nmc;
	
	// *** Get parameter containers
	virtual void SetParContainers();
	
	
	ClassDef(PndScrutAnaTask,1);
  
};

#endif
