Collinear mass implementation

Asked by Tomás Valencia on 2019-09-24

I am trying to implement the collinear mass to reproduce graphs such as those shown in the reference arXiv:1612.01644v1 [hep-ph]

The equation is given by (Equation 4.2 of the reference):

mcol = m_eμ/Sqrt(x)

where m_eμ is the invariant mass of the electron and the muon and
x = |transverse_momentum_e| / ( |transverse_momentum_e| + Missing_transverse_Energy ·transverse_momentum_e )

I have a doubt in itself I have used the appropriate instructions:

const MAfloat32 m() const for m_eμ

const MAfloat32 pt() const for |transverse_momentum_e|

MCParticleFormat& MET() const for Missing_transverse_Energy

const MAfloat32 p() const for transverse_momentum_e

I started adding a new instruction "mcol" from const MAfloat32 m() in ParticleBaseFormat.h

/// Accessor to the particle collinear mass
const MAfloat32 mcol(const MALorentzVector& MET) const
{
  MAfloat32 x = pt() / ( pt() + MET()*p() );
  MAfloat32 tmp = m()/sqrt(x);
  return tmp;
}

When I plot mcol() the console throws the following:

note: candidate expects 1 argument, 0 provided
failed

Thanks in advance

Question information

Language:
English Edit question
Status:
Answered
For:
MadAnalysis 5 Edit question
Assignee:
No assignee Edit question
Last query:
2019-10-05
Last reply:
2019-10-10
Benjamin Fuks (fuks) said : #1

Dear Tomas,

First of all, there is no need to send me the question a second time to my direct address a dozen of hours later. This won't make me answering faster (on the contrary). You must understand that we do what we can to help our users as quickly as possible, but you can't expect a reaction within a day or so on a 24/7 basis. We have other duties and our own projects, so that there may be items on our agenda that require a more immediate attention than your specific madanalysis question.

This being said,

> x = |transverse_momentum_e| / ( |transverse_momentum_e| + Missing_transverse_Energy ·transverse_momentum_e )
What is the difference between transverse_momentum_e| and transverse_momentum_e? Shouldn't this simplify?

> const MAfloat32 p() const for transverse_momentum_e
This is incorrect. p() is ghe magnitude of the three-momentum vector.

>
> I started adding a new instruction "mcol" from const MAfloat32 m() in ParticleBaseFormat.h
>
> /// Accessor to the particle collinear mass
> const MAfloat32 mcol(const MALorentzVector& MET) const
> {
> MAfloat32 x = pt() / ( pt() + MET()*p() );
I am unsure about the line above. See the previous comments.

> When I plot mcol() the console throws the following:
>
> note: candidate expects 1 argument, 0 provided
> failed
mcol() is supposed to take the MET vector as an argument, following your implementation. Since you provided no argument to the method, this behavior is expected.

Regards,

Benjamin

Tomás Valencia (tvalencia) said : #2

Dear Benjamin

I apologize for the mistake I made due to my lack of experience.
I have continued with the observations indicated and clarify some points of my doubt.

I use MadAnalisys5 in my work, unfortunately, I don't have experience and I found a way to implement an observable of my interest, namely, the colinear mass, which is defined as in eq (4.1) of arXiv:1612.01644:

                           mcol=M_inv/sqrt(x)

where x = |p_T^e| / (|p_T^e|+E_T^{miss}\cdot p_T^e)
with P_T^e the electron tranverse moment,
E_T^miss the missing transverse energy
and M_inv the invariant mass, M_inv(electron muon).

In order to obtain the collinear mass, I try to put it by hand as in the following code in the file ParticleBaseFormat.h:

  const MAfloat32 mcol(const MALorentzVector& MET) const
 {
 MAfloat64 Equix = sqrt(pt())/( sqrt(pt()) + MET.Pt()*pt() );
 MAfloat64 result = m()/sqrt(Equix);
 if (result<0) return 0;
        else return result;
        }

and added the following lines in the file observable_list.py

MCOL = ObservableBase( name = 'MCOL',
                    args = [ArgumentType.COMBINATION],
                    combination = CombinationType.SUMVECTOR,
                    plot_auto = False,
                    plot_nbins = 100,
                    plot_xmin = 0.,
                    plot_xmax = 1000.,
                    plot_unitX_tlatex = 'GeV/c^{2}',
                    plot_unitX_latex = 'GeV$^2$',
                         code_parton = 'mcol(event.mc()->MET().momentum())',
                         code_hadron = 'mcol(event.mc()->MET().momentum())',
                         code_reco = 'mcol(event.rec()->MET().momentum())',
                    cut_event = True,
                    cut_candidate = True,
                    tlatex = 'MCOL',
                    latex = 'MCOL'
                  )

Next, I execute via command line like plot MCOL(e-mu +).

The problem is if the following term was defined correctly:
E_T^{miss}\cdot p_T^e ---> MET.Pt()*pt()

With regards,
Tomás

Benjamin Fuks (fuks) said : #3

Hi Tomas,

It thus seems that your problem is fixed. Thanks for the follow-up.

Cheers,

Benjamin

> On 5 Oct 2019, at 09:47 , Tomás Valencia <email address hidden> wrote:
>
> Question #684214 on MadAnalysis 5 changed:
> https://answers.launchpad.net/madanalysis5/+question/684214
>
> Status: Answered => Open
>
> Tomás Valencia is still having a problem:
> Dear Benjamin
>
> I apologize for the mistake I made due to my lack of experience.
> I have continued with the observations indicated and clarify some points of my doubt.
>
> I use MadAnalisys5 in my work, unfortunately, I don't have experience
> and I found a way to implement an observable of my interest, namely, the
> colinear mass, which is defined as in eq (4.1) of arXiv:1612.01644:
>
> mcol=M_inv/sqrt(x)
>
> where x = |p_T^e| / (|p_T^e|+E_T^{miss}\cdot p_T^e)
> with P_T^e the electron tranverse moment,
> E_T^miss the missing transverse energy
> and M_inv the invariant mass, M_inv(electron muon).
>
> In order to obtain the collinear mass, I try to put it by hand as in the
> following code in the file ParticleBaseFormat.h:
>
> const MAfloat32 mcol(const MALorentzVector& MET) const
> {
> MAfloat64 Equix = sqrt(pt())/( sqrt(pt()) + MET.Pt()*pt() );
> MAfloat64 result = m()/sqrt(Equix);
> if (result<0) return 0;
> else return result;
> }
>
> and added the following lines in the file observable_list.py
>
> MCOL = ObservableBase( name = 'MCOL',
> args = [ArgumentType.COMBINATION],
> combination = CombinationType.SUMVECTOR,
> plot_auto = False,
> plot_nbins = 100,
> plot_xmin = 0.,
> plot_xmax = 1000.,
> plot_unitX_tlatex = 'GeV/c^{2}',
> plot_unitX_latex = 'GeV$^2$',
> code_parton = 'mcol(event.mc()->MET().momentum())',
> code_hadron = 'mcol(event.mc()->MET().momentum())',
> code_reco = 'mcol(event.rec()->MET().momentum())',
> cut_event = True,
> cut_candidate = True,
> tlatex = 'MCOL',
> latex = 'MCOL'
> )
>
>
> Next, I execute via command line like plot MCOL(e-mu +).
>
> The problem is if the following term was defined correctly:
> E_T^{miss}\cdot p_T^e ---> MET.Pt()*pt()
>
> With regards,
> Tomás
>
> --
> You received this question notification because you are an answer
> contact for MadAnalysis 5.

Can you help with this problem?

Provide an answer of your own, or ask Tomás Valencia for more information if necessary.

To post a message you must log in.