Skip to content
Snippets Groups Projects
D0ToKsPipPimEventList.cc 3.63 KiB
Newer Older
#include <getopt.h>
#include <fstream>
#include <string>

#include "Examples/D0ToKsPipPim/D0ToKsPipPimEventList.hh"

#include "Event/EventList.hh"
#include "PwaUtils/KinUtils.hh"

#include "Event/Event.hh"
#include "ErrLogger/ErrLogger.hh"


D0ToKsPipPimEventList::D0ToKsPipPimEventList() :
  EvtDataBaseListNew()
{
}


D0ToKsPipPimEventList::~D0ToKsPipPimEventList()
{
}

void D0ToKsPipPimEventList::read4Vecs(EventList& evtList, std::vector<EvtDataNew*>& theEvtList, double& evtWeightSum, int maxEvts){
  Event* anEvent;
  int evtCount = 0;
  while ((anEvent = evtList.nextEvent())){
    if (evtCount>= maxEvts) break;
    if (evtCount%10000 == 0) Info << "4vec calculation for event " << evtCount ;  // << endmsg;

    Vector4<float> ks_lab = *(anEvent->p4(0));
    Vector4<float> pip_lab = *(anEvent->p4(1));
    Vector4<float> pim_lab = *(anEvent->p4(2));
    
    Vector4<float> V4_D0_lab = ks_lab+pip_lab+pim_lab;
    Vector4<float> V4_pippim_lab = pip_lab+pim_lab;
    Vector4<float> V4_KsPip_lab = ks_lab+pip_lab;
    Vector4<float> V4_KsPim_lab = ks_lab+pim_lab;

    if (evtCount%10000 == 0){
      Info << "D0 4vec" << "\n"
	   << " px: " << V4_D0_lab.Px() <<"\t"
	   << " py: " << V4_D0_lab.Py() <<"\t"
	   << " pz: " << V4_D0_lab.Pz() <<"\t"
	   << " e : " << V4_D0_lab.E() << "\t"
	   << " m : " << V4_D0_lab.M() ;  // << endmsg;
    }

    Vector4<float> V4_D0_Heli(V4_D0_lab);
    V4_D0_Heli.Boost(V4_D0_lab);
    
    Vector4<float>  V4_Ks_HeliD0( ks_lab   );
    V4_Ks_HeliD0.Boost(V4_D0_lab);

    Vector4<float>  V4_pip_HeliD0( pip_lab   );
    V4_pip_HeliD0.Boost(V4_D0_lab); 

    Vector4<float>  V4_pim_HeliD0( pip_lab   );
    V4_pim_HeliD0.Boost(V4_D0_lab);          

    Vector4<float>  V4_KsPip_HeliD0( ks_lab+pip_lab   );
    V4_KsPip_HeliD0.Boost(V4_D0_lab);

    Vector4<float>  V4_KsPim_HeliD0( ks_lab+pim_lab   );
    V4_KsPim_HeliD0.Boost(V4_D0_lab);

    Vector4<float>  V4_PipPim_HeliD0( pip_lab+pim_lab   );
    V4_PipPim_HeliD0.Boost(V4_D0_lab);

    Vector4<float> V4_Pip_HeliPipPim=helicityVec(V4_D0_lab, V4_pippim_lab, pip_lab);
    Vector4<float> V4_Pip_HeliKsPip=helicityVec(V4_D0_lab, V4_KsPip_lab, pip_lab);
    Vector4<float> V4_Pim_HeliKsPim=helicityVec(V4_D0_lab, V4_KsPim_lab, pim_lab);
  
    EvtDataNew* evtData=new EvtDataNew();
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_D0_Heli] = V4_D0_Heli;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_Ks_HeliD0] = V4_Ks_HeliD0;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_Pip_HeliD0] = V4_pip_HeliD0;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_Pim_HeliD0] = V4_pim_HeliD0;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_PipPim_HeliD0] = V4_PipPim_HeliD0;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_KsPip_HeliD0] = V4_KsPip_HeliD0;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_KsPim_HeliD0] = V4_KsPim_HeliD0;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_Pip_HeliPipPim] = V4_Pip_HeliPipPim;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_Pip_HeliKsPip] = V4_Pip_HeliKsPip;
    evtData->FourVecsDec[enumD0KsPiPi4V::V4_Pim_HeliKsPim] = V4_Pim_HeliKsPim;
 
    // calculate and store Wignerd functions for X -> pi+ pi-, X -> Ks pi+ and X -> Ks pi- 

    for (Spin jX=0; jX<2; jX++){
      evtData->WignerDsDec[enumD0KsPiPiDfunc::df_XToPipPim][jX][0][0]=Wigner_D(0.,V4_Pip_HeliPipPim.Theta(),0,jX,0,0);
      evtData->WignerDsDec[enumD0KsPiPiDfunc::df_XToKsPip][jX][0][0]=Wigner_D(0.,V4_Pip_HeliKsPip.Theta(),0,jX,0,0);
      evtData->WignerDsDec[enumD0KsPiPiDfunc::df_XToKsPip][jX][0][0]=Wigner_D(0.,V4_Pim_HeliKsPim.Theta(),0,jX,0,0);
    }

    evtData->evtWeight=anEvent->Weight();
    evtData->evtNo=_evtNoAll;
    theEvtList.push_back(evtData);
    
    evtWeightSum += anEvent->Weight();    
    ++evtCount;
    ++_evtNoAll;
  }
}