Apply pT cut on hardest muon

Asked by Avirup Ghosh on 2018-03-16

Dear Developers,

I am trying to generate events for the process 'p p > z z,(z > mu- mu+),(z > l- l+)' in the SM with MG v2.6.1 and want to apply a pT-cut on the two hardest muons in each of the event. I have implemented the cut as follows in setcuts.f and cuts.f, where I mainly added a function is_a_lmu as follows:-

setcuts.f:-
< added the following lines at line no. 81

      LOGICAL IS_A_LMU(NEXTERNAL)
      logical do_cuts(nexternal)
      COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
     . IS_A_ONIUM,IS_A_LMU,do_cuts

<at line no. 99

       LOGICAL IS_A_J_SAVE(NEXTERNAL),IS_A_L_SAVE(NEXTERNAL)
     $ ,IS_A_B_SAVE(NEXTERNAL),IS_A_A_SAVE(NEXTERNAL),IS_A_LMU_SAVE(NEXTERNAL)

<at line no. 118

       integer nb_j, nb_b, nb_a, nb_l, nb_lmu, nb_nocut,nb_pdg

<at line no. 203

    is_a_lmu(i)=.false.

<at line no. 226

       if (abs(idup(i,1,iproc)).eq.13) is_a_lmu(i)=.true. ! mu+ mu-

<at line no. 287

        if(is_a_lmu(i))then
                 etmin(i)=ptl
                 etmax(i)=ptlmax
                 emin(i)=el
                 emax(i)=elmax
                 etamax(i)=etal
                 etamin(i)=etalmin
            endif

< similarly in the block delta r cut around line no. 358,377,389 and 406

               if(is_a_lmu(i).and.is_a_lmu(j)) r2min(j,i)=drll
               if(is_a_lmu(i).and.is_a_l(j)) r2min(j,i)=drll

               if((is_a_lmu(i).and.is_a_j(j)).or.
     & (is_a_j(i).and.is_a_lmu(j))) r2min(j,i)=drjl
               if((is_a_b(i).and.is_a_lmu(j)).or.
     & (is_a_lmu(i).and.is_a_b(j))) r2min(j,i)=drbl
               if((is_a_lmu(i).and.is_a_a(j)).or.
     & (is_a_a(i).and.is_a_lmu(j))) r2min(j,i)=dral

               if(is_a_lmu(i).and.is_a_lmu(j)) r2max(j,i)=drllmax

               if((is_a_lmu(i).and.is_a_j(j)).or.
     & (is_a_j(i).and.is_a_lmu(j))) r2max(j,i)=drjlmax
               if((is_a_b(i).and.is_a_lmu(j)).or.
     & (is_a_lmu(i).and.is_a_b(j))) r2max(j,i)=drblmax
               if((is_a_lmu(i).and.is_a_a(j)).or.
     & (is_a_a(i).and.is_a_lmu(j))) r2max(j,i)=dralmax

< in block smin cut

                 if((is_a_lmu(i).and.is_a_lmu(j)).and.
     & (abs(idup(i,1,iproc)).eq.abs(idup(j,1,iproc))).and.
     & (idup(i,1,iproc)*idup(j,1,iproc).lt.0))
     & s_min(j,i)=mmll*dabs(mmll) !only on mu+mu- pairs

                  if((is_a_lmu(i).and.is_a_lmu(j)).and.
     & (abs(idup(i,1,iproc)).eq.abs(idup(j,1,iproc))).and.
     & (idup(i,1,iproc)*idup(j,1,iproc).lt.0))
     & s_max(j,i)=mmllmax*dabs(mmllmax) !only on mu+mu- pairs

< in block Compute smin
< We have modified lepton block as follows
< line no. 675
                  if (nb_l.eq.1) then
                  smin_p = smin_p + max(el,ptl,xptl,0d0,
     & max(ptl,ptl3min,ptl4min))
                  elseif(nb_l.eq.2) then
                  smin_p = smin_p + max(el,ptl,0d0,max(ptl,ptl3min,ptl4min))
< line no. 689
                  if (nb_l.eq.1) then
                  smin_p = smin_p + max(xptl,0d0,
     & max(ptl,ptl3min,ptl4min))
                  elseif(nb_l.eq.2) then
                  smin_p = smin_p + max(0d0,ptl,ptl3min,ptl4min)

< and then added at line no. 709

      smin_m = 0d0
      smin_p = 0d0
      nb_lmu = 0
      nb_nocut = 0
      do i=nincoming+1,nexternal-1
         if (is_a_lmu(i))then
            nb_lmu = nb_lmu + 1
            smin_m = smin_m - pmass(i)**2
            if (do_cuts(i))then
               if (nb_lmu.eq.1) then
                  smin_p = smin_p + max(el,ptl,xptl,0d0,
     & max(ptl1min,ptl2min,ptl3min,ptl4min))
               elseif(nb_lmu.eq.2) then
                  smin_p = smin_p + max(el,ptl,0d0,max(ptl2min,ptl3min,ptl4min))
               elseif(nb_lmu.eq.3) then
                  smin_p = smin_p + max(el,ptl,0d0, max(ptl3min,ptl4min))
               elseif(nb_lmu.eq.4) then
                  smin_p = smin_p + max(el,ptl,ptl4min,0d0)
               else
                  smin_p = smin_p + max(el,ptl,0d0)
               endif
            else
               nb_nocut = nb_nocut + 1
               if (nb_lmu.eq.1) then
                  smin_p = smin_p + max(xptl,0d0,
     & max(ptl1min,ptl2min,ptl3min,ptl4min))
               elseif(nb_lmu.eq.2) then
                  smin_p = smin_p + max(0d0,ptl2min,ptl3min,ptl4min)
               elseif(nb_lmu.eq.3) then
                  smin_p = smin_p + max(0d0,ptl3min,ptl4min)
               elseif(nb_lmu.eq.4) then
                  smin_p = smin_p + max(ptl4min,0d0)
               endif
            endif
         endif
      enddo
      if (nb_lmu.gt.0)then
         if ((nb_lmu-nb_nocut).gt.0)then
            smin_m = smin_m + (nb_lmu-nb_nocut)*((nb_lmu-nb_nocut)-1)/2d0*mmll**2
         endif
        smin = smin + max(smin_p**2, smin_m, mmnl**2, ptllmin**2, misset**2)
      endif

>at line no. 787
       is_a_lmu_save(i)=is_a_lmu(i)
>at line no. 845
        if (is_a_lmu_save(i).neqv.is_a_lmu(i)) then
               if (ptlmin4(1).gt.0d0 .or. ptlmax4(1).ge.0d0) equal=.false.
               if (ptlmin4(2).gt.0d0 .or. ptlmax4(2).ge.0d0) equal=.false.
               if (ptlmin4(3).gt.0d0 .or. ptlmax4(3).ge.0d0) equal=.false.
               if (ptlmin4(4).gt.0d0 .or. ptlmax4(4).ge.0d0) equal=.false.
               if (mmnl.gt.0d0 .or. mmnlmax.ge.0d0) equal=.false.
               if (xptl.gt.0d0) equal=.false.
               if (ptgmin.ne.0d0 .and. isoEM) equal=.false.
            endif
>at line no. 961
        ncheck=0
        do i=nincoming+1,nexternal
           if(is_a_lmu(i)) ncheck=ncheck+1
        enddo

        if(ncheck.eq.0.and. xptl .gt. 0d0) then
           write (*,*) "Warning: cuts on the muon will be ignored"
           xptl = 0d0
        endif

cuts.f:
>line no. 53

       real*8 ptemp(0:3), ptemp2(0:3), ptemp3(0:3)

>line no. 121

      LOGICAL IS_A_LMU(NEXTERNAL)
      logical do_cuts(nexternal)
      COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
     . IS_A_ONIUM,IS_A_LMU, do_cuts

>at line no. 350

      ptemp3(j)=0

>at line no. 359

     elseif(is_a_lmu(i)) then
          if(debug) write (*,*) i,' -> muon '
            do j=0,3
               ptemp3(j)=ptemp3(j)+p(j,i)
            enddo

>at line no. 377

     if(debug.and.ptemp3(0).eq.0d0) write (*,*) 'No muons in event'

>at line no. 1042 (after commenting out the block REQUIRE AT LEAST ONE LEPTON WITH PT>XPTL)

      IF(xptl.gt.0d0) THEN
            xvar=0
            do i=nincoming+1,nexternal
               if(is_a_lmu(i)) xvar=max(xvar,pt(p(0,i)))
            enddo
            if (xvar .lt. xptl) then
               passcuts=.false.
               if(debug) write (*,*) ' xptl -> fails'
               return
            endif
         ENDIF

After all this modifications when I did ./bin/generate_events with ptl1min=ptl2min=ptl3min=ptl4min=10.0 while keeping all other cuts intact as in the run_card.dat the code stops with the error message:

Survey return zero cross section.
   Typical reasons are the following:
   1) A massive s-channel particle has a width set to zero.
   2) The pdf are zero for at least one of the initial state particles
      or you are using maxjetflavor=4 for initial state b:s.
   3) The cuts are too strong.
   Please check/correct your param_card and/or your run_card

While with ptl1min=ptl2min=ptl3min=ptl4min=0.0 it is working fine!!!!!

Can you help me in this issue?
Regards,
Avirup

Question information

Language:
English Edit question
Status:
Answered
For:
MadGraph5_aMC@NLO Edit question
Assignee:
No assignee Edit question
Last query:
2018-03-16
Last reply:
2018-03-16

Hi,

Obviously I'm not going to comment on the change that you made on the code.
Since those are too complex to comment. I will just comment on some general point, irrespective of your situation.

1) Since your muon are coming from decay chain, to have cut applied on such particle you might need to set cut_decays=T in the run_card.

2) You need to be careful that your cut are compatible with the symmetry that we are using for evaluating the matrix-element.
For example if you have set your muon mass to zero then we will realise that the electron and muon matrix element are
actually identical and that nothing distinguish them. Therefore the generation of events of both type are done simulatneously and we just write 50% of those events generated as muon and the rest as electron.

Adding a cut distinguishing those two will then not be working as expected!
We have some check for standard cut, but this will be a problem for your cut implementation.

3) I would recommend to not play with s_min to start with. Since this parameter is just to fasten the convergence of the code.
So when implementing a new cut, it is better to not touch to it (or even set it to zero) and when the code is running (for low cut value) then you can start implementing that part and see that for low cut value, you do have agreement.
When this is the case then you should be optimal for large cut value

4) You should never change the meaning of one of the cuts. This is dangerous since some cuts are optimised in various part of the code and you can have unexpected side effects.

5) [This is actually only true starting at 2.6.2 --not yet released--], We have dedicated a special file where dummy function
(i.e. function doing nothing in the official version) are defined allowing user/PLUGIN to modify the behavior of the code
without any risk of breaking stuff. One of those functions are dedicated to cuts. This is the place where additional cuts
should be define and not directly in cuts.f

For your code implementation, It seems that you are doing a lot of code duplication. (am I correct?)
I would suggest to rather do:

> if (abs(idup(i,1,iproc)).eq.13) is_a_lmu(i)=.true. ! mu+ mu-
> if (abs(idup(i,1,iproc)).eq.13) is_a_l(i)=.true. ! mu+ mu-

i.e. keep the muon with "is_a_l" to True
which should reduce the need to duplicate a lot of code
and therefore make clear what you try to do (and reduce the possibility of mistake).

As i said, I'm not going to debug your change. but if you want to explain your strategy in words, I can think if this make sense or not.

Cheers,

Olivier

> On 16 Mar 2018, at 07:57, Avirup Ghosh <email address hidden> wrote:
>
> New question #665701 on MadGraph5_aMC@NLO:
> https://answers.launchpad.net/mg5amcnlo/+question/665701
>
> Dear Developers,
>
> I am trying to generate events for the process 'p p > z z,(z > mu- mu+),(z > l- l+)' in the SM with MG v2.6.1 and want to apply a pT-cut on the two hardest muons in each of the event. I have implemented the cut as follows in setcuts.f and cuts.f, where I mainly added a function is_a_lmu as follows:-
>
> setcuts.f:-
> < added the following lines at line no. 81
>
> LOGICAL IS_A_LMU(NEXTERNAL)
> logical do_cuts(nexternal)
> COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
> . IS_A_ONIUM,IS_A_LMU,do_cuts
>
> <at line no. 99
>
> LOGICAL IS_A_J_SAVE(NEXTERNAL),IS_A_L_SAVE(NEXTERNAL)
> $ ,IS_A_B_SAVE(NEXTERNAL),IS_A_A_SAVE(NEXTERNAL),IS_A_LMU_SAVE(NEXTERNAL)
>
> <at line no. 118
>
> integer nb_j, nb_b, nb_a, nb_l, nb_lmu, nb_nocut,nb_pdg
>
> <at line no. 203
>
> is_a_lmu(i)=.false.
>
> <at line no. 226
>
> if (abs(idup(i,1,iproc)).eq.13) is_a_lmu(i)=.true. ! mu+ mu-
>
> <at line no. 287
>
> if(is_a_lmu(i))then
> etmin(i)=ptl
> etmax(i)=ptlmax
> emin(i)=el
> emax(i)=elmax
> etamax(i)=etal
> etamin(i)=etalmin
> endif
>
> < similarly in the block delta r cut around line no. 358,377,389 and 406
>
> if(is_a_lmu(i).and.is_a_lmu(j)) r2min(j,i)=drll
> if(is_a_lmu(i).and.is_a_l(j)) r2min(j,i)=drll
>
> if((is_a_lmu(i).and.is_a_j(j)).or.
> & (is_a_j(i).and.is_a_lmu(j))) r2min(j,i)=drjl
> if((is_a_b(i).and.is_a_lmu(j)).or.
> & (is_a_lmu(i).and.is_a_b(j))) r2min(j,i)=drbl
> if((is_a_lmu(i).and.is_a_a(j)).or.
> & (is_a_a(i).and.is_a_lmu(j))) r2min(j,i)=dral
>
>
> if(is_a_lmu(i).and.is_a_lmu(j)) r2max(j,i)=drllmax
>
> if((is_a_lmu(i).and.is_a_j(j)).or.
> & (is_a_j(i).and.is_a_lmu(j))) r2max(j,i)=drjlmax
> if((is_a_b(i).and.is_a_lmu(j)).or.
> & (is_a_lmu(i).and.is_a_b(j))) r2max(j,i)=drblmax
> if((is_a_lmu(i).and.is_a_a(j)).or.
> & (is_a_a(i).and.is_a_lmu(j))) r2max(j,i)=dralmax
>
> < in block smin cut
>
> if((is_a_lmu(i).and.is_a_lmu(j)).and.
> & (abs(idup(i,1,iproc)).eq.abs(idup(j,1,iproc))).and.
> & (idup(i,1,iproc)*idup(j,1,iproc).lt.0))
> & s_min(j,i)=mmll*dabs(mmll) !only on mu+mu- pairs
>
> if((is_a_lmu(i).and.is_a_lmu(j)).and.
> & (abs(idup(i,1,iproc)).eq.abs(idup(j,1,iproc))).and.
> & (idup(i,1,iproc)*idup(j,1,iproc).lt.0))
> & s_max(j,i)=mmllmax*dabs(mmllmax) !only on mu+mu- pairs
>
> < in block Compute smin
> < We have modified lepton block as follows
> < line no. 675
> if (nb_l.eq.1) then
> smin_p = smin_p + max(el,ptl,xptl,0d0,
> & max(ptl,ptl3min,ptl4min))
> elseif(nb_l.eq.2) then
> smin_p = smin_p + max(el,ptl,0d0,max(ptl,ptl3min,ptl4min))
> < line no. 689
> if (nb_l.eq.1) then
> smin_p = smin_p + max(xptl,0d0,
> & max(ptl,ptl3min,ptl4min))
> elseif(nb_l.eq.2) then
> smin_p = smin_p + max(0d0,ptl,ptl3min,ptl4min)
>
> < and then added at line no. 709
>
> smin_m = 0d0
> smin_p = 0d0
> nb_lmu = 0
> nb_nocut = 0
> do i=nincoming+1,nexternal-1
> if (is_a_lmu(i))then
> nb_lmu = nb_lmu + 1
> smin_m = smin_m - pmass(i)**2
> if (do_cuts(i))then
> if (nb_lmu.eq.1) then
> smin_p = smin_p + max(el,ptl,xptl,0d0,
> & max(ptl1min,ptl2min,ptl3min,ptl4min))
> elseif(nb_lmu.eq.2) then
> smin_p = smin_p + max(el,ptl,0d0,max(ptl2min,ptl3min,ptl4min))
> elseif(nb_lmu.eq.3) then
> smin_p = smin_p + max(el,ptl,0d0, max(ptl3min,ptl4min))
> elseif(nb_lmu.eq.4) then
> smin_p = smin_p + max(el,ptl,ptl4min,0d0)
> else
> smin_p = smin_p + max(el,ptl,0d0)
> endif
> else
> nb_nocut = nb_nocut + 1
> if (nb_lmu.eq.1) then
> smin_p = smin_p + max(xptl,0d0,
> & max(ptl1min,ptl2min,ptl3min,ptl4min))
> elseif(nb_lmu.eq.2) then
> smin_p = smin_p + max(0d0,ptl2min,ptl3min,ptl4min)
> elseif(nb_lmu.eq.3) then
> smin_p = smin_p + max(0d0,ptl3min,ptl4min)
> elseif(nb_lmu.eq.4) then
> smin_p = smin_p + max(ptl4min,0d0)
> endif
> endif
> endif
> enddo
> if (nb_lmu.gt.0)then
> if ((nb_lmu-nb_nocut).gt.0)then
> smin_m = smin_m + (nb_lmu-nb_nocut)*((nb_lmu-nb_nocut)-1)/2d0*mmll**2
> endif
> smin = smin + max(smin_p**2, smin_m, mmnl**2, ptllmin**2, misset**2)
> endif
>
>> at line no. 787
> is_a_lmu_save(i)=is_a_lmu(i)
>> at line no. 845
> if (is_a_lmu_save(i).neqv.is_a_lmu(i)) then
> if (ptlmin4(1).gt.0d0 .or. ptlmax4(1).ge.0d0) equal=.false.
> if (ptlmin4(2).gt.0d0 .or. ptlmax4(2).ge.0d0) equal=.false.
> if (ptlmin4(3).gt.0d0 .or. ptlmax4(3).ge.0d0) equal=.false.
> if (ptlmin4(4).gt.0d0 .or. ptlmax4(4).ge.0d0) equal=.false.
> if (mmnl.gt.0d0 .or. mmnlmax.ge.0d0) equal=.false.
> if (xptl.gt.0d0) equal=.false.
> if (ptgmin.ne.0d0 .and. isoEM) equal=.false.
> endif
>> at line no. 961
> ncheck=0
> do i=nincoming+1,nexternal
> if(is_a_lmu(i)) ncheck=ncheck+1
> enddo
>
> if(ncheck.eq.0.and. xptl .gt. 0d0) then
> write (*,*) "Warning: cuts on the muon will be ignored"
> xptl = 0d0
> endif
>
> cuts.f:
>> line no. 53
>
> real*8 ptemp(0:3), ptemp2(0:3), ptemp3(0:3)
>
>> line no. 121
>
> LOGICAL IS_A_LMU(NEXTERNAL)
> logical do_cuts(nexternal)
> COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
> . IS_A_ONIUM,IS_A_LMU, do_cuts
>
>> at line no. 350
>
> ptemp3(j)=0
>
>> at line no. 359
>
> elseif(is_a_lmu(i)) then
> if(debug) write (*,*) i,' -> muon '
> do j=0,3
> ptemp3(j)=ptemp3(j)+p(j,i)
> enddo
>
>> at line no. 377
>
> if(debug.and.ptemp3(0).eq.0d0) write (*,*) 'No muons in event'
>
>> at line no. 1042 (after commenting out the block REQUIRE AT LEAST ONE LEPTON WITH PT>XPTL)
>
> IF(xptl.gt.0d0) THEN
> xvar=0
> do i=nincoming+1,nexternal
> if(is_a_lmu(i)) xvar=max(xvar,pt(p(0,i)))
> enddo
> if (xvar .lt. xptl) then
> passcuts=.false.
> if(debug) write (*,*) ' xptl -> fails'
> return
> endif
> ENDIF
>
> After all this modifications when I did ./bin/generate_events with ptl1min=ptl2min=ptl3min=ptl4min=10.0 while keeping all other cuts intact as in the run_card.dat the code stops with the error message:
>
> Survey return zero cross section.
> Typical reasons are the following:
> 1) A massive s-channel particle has a width set to zero.
> 2) The pdf are zero for at least one of the initial state particles
> or you are using maxjetflavor=4 for initial state b:s.
> 3) The cuts are too strong.
> Please check/correct your param_card and/or your run_card
>
> While with ptl1min=ptl2min=ptl3min=ptl4min=0.0 it is working fine!!!!!
>
> Can you help me in this issue?
> Regards,
> Avirup
>
>
>
> --
> You received this question notification because you are an answer
> contact for MadGraph5_aMC@NLO.

Avirup Ghosh (avirupghosh1993) said : #2

Thanks,
 Olivier,
    for your remarks. What I actually want to do is to look for events where I can have 2 muons with pT > 70.0 GeV always, with additional leptons (may be e-e+ or mu-mu+) with pT > 10.0 GeV . As you have mentioned I have done the following:

<< setcuts.f:-
< near the top, I have added

      LOGICAL IS_A_LMU(NEXTERNAL)
      logical do_cuts(nexternal)
      COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
     . IS_A_ONIUM,IS_A_LMU,do_cuts

< in the block "check if I have to apply cuts on the particles"

      is_a_lmu(i)=.false.

< then in the block "charged-leptons" as you suggested

    if (abs(idup(i,1,iproc)).eq.13) is_a_l(i)=.true. ! mu+ mu-
    if (abs(idup(i,1,iproc)).eq.13) is_a_lmu(i)=.true. ! mu+ mu-

<<cuts.f:-
< in the block "SPECIAL CUTS"

      LOGICAL IS_A_LMU(NEXTERNAL)
      logical do_cuts(nexternal)
      COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
     . IS_A_ONIUM,IS_A_LMU, do_cuts

<< finally just before "DURHAM_KT CUT"

  c-- reset ptemp(0:3)
      do j=0,3
         ptemp(j)=0 ! for the neutrino
      enddo

c- sum over the momenta
      do i=nincoming+1,nexternal
        do j=0,3
         if(is_a_lmu(i))ptemp(j)=ptemp(j)+p(j,i)
        enddo
      enddo

c- Compute the muon pT and check its value against the chosen minimum value
      if(dsqrt(abs((ptemp(1)*ptemp(1)+ptemp(2)*ptemp(2)))).lt.20) then
         passcuts=.false.
      endif

Nothing else has been changed.
But still the same error persists,

Survey return zero cross section.
   Typical reasons are the following:
   1) A massive s-channel particle has a width set to zero.
   2) The pdf are zero for at least one of the initial state particles
      or you are using maxjetflavor=4 for initial state b:s.
   3) The cuts are too strong.
   Please check/correct your param_card and/or your run_card.

But surprisingly enough without the block

c- Compute the muon pT and check its value against the chosen minimum value
      if(dsqrt(abs((ptemp(1)*ptemp(1)+ptemp(2)*ptemp(2)))).lt.20) then
         passcuts=.false.
      endif

the code is working perfectly fine!!!!!!!!!!
Can you help me identify the problem in this case?
And how to demand min_pT for only two muons.......if it is at all possible.
Thanking You,
Avirup

Hi,

> c- Compute the muon pT and check its value against the chosen minimum value
> if(dsqrt(abs((ptemp(1)*ptemp(1)+ptemp(2)*ptemp(2)))).lt.20) then
> passcuts=.false.
> endif

This is not the muon pt!
This is the pt of the sum of all muon.

So for
p p > z z,(z > mu- mu+),(z > mu- mu+)
this sum is always zero and you do not have any events passing the cuts.

The fact that
p p > z z,(z > mu- mu+),(z > e- e+)
does not contribute is due to what I explain in the previous exchange.

You can not use
p p > z z,(z > mu- mu+),(z > l- l+)
in this case if the muon are massless
you should either change the model to set the muon massive or
generate it like this

> generate p p > z z,(z > mu- mu+),(z > mu- mu+) @1
> add process p p > z z,(z > mu- mu+),(z > e- e+) @2

(The use of the @ is to forbid madgraph to merge those two)

> And how to demand min_pT for only two muons.......if it is at all possible.

Yes that's possible, you have to define min_pt1, min_pt2
and cycle over the muon to update such two value.

when you have those two value correctly define, then you can cut on those.

Cheers,

Olivier

> On 16 Mar 2018, at 11:16, Avirup Ghosh <email address hidden> wrote:
>
> Question #665701 on MadGraph5_aMC@NLO changed:
> https://answers.launchpad.net/mg5amcnlo/+question/665701
>
> Status: Answered => Open
>
> Avirup Ghosh is still having a problem:
> Thanks,
> Olivier,
> for your remarks. What I actually want to do is to look for events where I can have 2 muons with pT > 70.0 GeV always, with additional leptons (may be e-e+ or mu-mu+) with pT > 10.0 GeV . As you have mentioned I have done the following:
>
> << setcuts.f:-
> < near the top, I have added
>
> LOGICAL IS_A_LMU(NEXTERNAL)
> logical do_cuts(nexternal)
> COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
> . IS_A_ONIUM,IS_A_LMU,do_cuts
>
> < in the block "check if I have to apply cuts on the particles"
>
> is_a_lmu(i)=.false.
>
> < then in the block "charged-leptons" as you suggested
>
> if (abs(idup(i,1,iproc)).eq.13) is_a_l(i)=.true. ! mu+ mu-
> if (abs(idup(i,1,iproc)).eq.13) is_a_lmu(i)=.true. ! mu+ mu-
>
> <<cuts.f:-
> < in the block "SPECIAL CUTS"
>
> LOGICAL IS_A_LMU(NEXTERNAL)
> logical do_cuts(nexternal)
> COMMON /TO_SPECISA/IS_A_J,IS_A_A,IS_A_L,IS_A_B,IS_A_NU,IS_HEAVY,
> . IS_A_ONIUM,IS_A_LMU, do_cuts
>
> << finally just before "DURHAM_KT CUT"
>
> c-- reset ptemp(0:3)
> do j=0,3
> ptemp(j)=0 ! for the neutrino
> enddo
>
> c- sum over the momenta
> do i=nincoming+1,nexternal
> do j=0,3
> if(is_a_lmu(i))ptemp(j)=ptemp(j)+p(j,i)
> enddo
> enddo
>
> c- Compute the muon pT and check its value against the chosen minimum value
> if(dsqrt(abs((ptemp(1)*ptemp(1)+ptemp(2)*ptemp(2)))).lt.20) then
> passcuts=.false.
> endif
>
> Nothing else has been changed.
> But still the same error persists,
>
> Survey return zero cross section.
> Typical reasons are the following:
> 1) A massive s-channel particle has a width set to zero.
> 2) The pdf are zero for at least one of the initial state particles
> or you are using maxjetflavor=4 for initial state b:s.
> 3) The cuts are too strong.
> Please check/correct your param_card and/or your run_card.
>
> But surprisingly enough without the block
>
> c- Compute the muon pT and check its value against the chosen minimum value
> if(dsqrt(abs((ptemp(1)*ptemp(1)+ptemp(2)*ptemp(2)))).lt.20) then
> passcuts=.false.
> endif
>
> the code is working perfectly fine!!!!!!!!!!
> Can you help me identify the problem in this case?
> And how to demand min_pT for only two muons.......if it is at all possible.
> Thanking You,
> Avirup
>
> --
> You received this question notification because you are an answer
> contact for MadGraph5_aMC@NLO.

Can you help with this problem?

Provide an answer of your own, or ask Avirup Ghosh for more information if necessary.

To post a message you must log in.