Esempio n. 1
0
    def GetStringDisplay(self):
        msg=""

        # Case : X < obs < Y
        if len(self.sequence)==3 and \
           self.sequence[0].__class__.__name__=='ConditionType' and \
           self.sequence[1].__class__.__name__=='ConditionConnector' and \
           self.sequence[2].__class__.__name__=='ConditionType' and \
           self.sequence[0].observable == self.sequence[2].observable and \
           self.sequence[1].value == ConnectorType.AND:
            
            msg+=str(self.sequence[0].threshold)+" "
            msg+=OperatorType.convert2string(self.sequence[0].operator)+" "
            msg+=self.sequence[0].observable.name+" "
            msg+=OperatorType.convert2string(self.sequence[2].operator)+" "
            msg+=str(self.sequence[2].threshold)
            
        # General case : loop over sequence
        else:
            
            if not self.mother:
                msg+="( "

            for i in range(0,len(self.sequence)):
                msg+=self.sequence[i].GetStringDisplay()
                if i!=(len(self.sequence)-1):
                    msg+=" "

            if not self.mother:
                msg+=" )"

        return msg
    def GetStringDisplay(self):
        msg = ""

        # Case : X < obs < Y
        if len(self.sequence)==3 and \
           self.sequence[0].__class__.__name__=='ConditionType' and \
           self.sequence[1].__class__.__name__=='ConditionConnector' and \
           self.sequence[2].__class__.__name__=='ConditionType' and \
           self.sequence[0].observable == self.sequence[2].observable and \
           self.sequence[1].value == ConnectorType.AND:

            msg += str(self.sequence[0].threshold) + " "
            msg += OperatorType.convert2string(self.sequence[0].operator) + " "
            msg += self.sequence[0].observable.name + " "
            msg += OperatorType.convert2string(self.sequence[2].operator) + " "
            msg += str(self.sequence[2].threshold)

        # General case : loop over sequence
        else:

            if not self.mother:
                msg += "( "

            for i in range(0, len(self.sequence)):
                msg += self.sequence[i].GetStringDisplay()
                if i != (len(self.sequence) - 1):
                    msg += " "

            if not self.mother:
                msg += " )"

        return msg
Esempio n. 3
0
def WriteJobSum2N(file,iabs,combi1,combi2,main,tagName,tagIndex,condition,iterator1,iterator2):

    cut = main.selection[iabs]
    obs = condition.observable

    # Getting container name
    containers1=[]
    for item in combi1:
        containers1.append(InstanceName.Get('P_'+\
                                           item.name+cut.rank+cut.statuscode))

    containers2=[]
    for item in combi2:
        containers2.append(InstanceName.Get('P_'+\
                                           item.name+cut.rank+cut.statuscode))

    # Case of one particle/multiparticle
    if len(combi1)==1 and len(combi2)==1:
        file.write('    if (')
        file.write(containers1[0]+'['+iterator1+'[0]]->' +\
                   'dr('+containers2[0]+'['+iterator2+'[0]])' +\
                   OperatorType.convert2cpp(condition.operator) +\
                   str(condition.threshold) +\
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
        return

    # Operation : sum or diff
    if obs.combination in [CombinationType.SUMSCALAR,\
                           CombinationType.SUMVECTOR,\
                           CombinationType.DEFAULT]:
        oper_string = '+'
    else:
        oper_string = '-'

    # Vector sum/diff
    if obs.combination in [CombinationType.DEFAULT,\
                             CombinationType.SUMVECTOR,\
                             CombinationType.DIFFVECTOR]:

        # First part
        file.write('    ParticleBaseFormat q1;\n')
        for ind in range(0,len(combi1)):
            file.write('    q1'+oper_string+'='+\
                       containers1[ind]+'[+'+iterator1+'['+str(ind)+']]->'+\
                       'momentum();\n')

        # Second part
        file.write('    ParticleBaseFormat q2;\n')
        for ind in range(0,len(combi2)):
            file.write('    q2'+oper_string+'='+\
                       containers2[ind]+'['+iterator2+'['+str(ind)+']]->'+\
                       'momentum();\n')

        # Result    
        file.write('    if (q1.dr(q2)'+\
                   ''+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
Esempio n. 4
0
def WriteFactorizedCutWith0Arg(file,main,iabs,icut,container,tagName,tagIndex,condition):
    file.write('        if (')
    file.write(container+'[muf]->' +\
               condition.observable.code(main.mode) +\
               OperatorType.convert2cpp(condition.operator) +\
               str(condition.threshold) +\
               ') '+tagName+'['+str(tagIndex)+']=true;\n')
Esempio n. 5
0
def WriteFactorizedCutWith0Arg(file,main,iabs,container,tagName,tagIndex,condition):
    file.write('        if (')
    file.write(container+'[muf]->' +\
               condition.observable.code(main.mode) +\
               OperatorType.convert2cpp(condition.operator) +\
               str(condition.threshold) +\
               ') '+tagName+'['+str(tagIndex)+']=true;\n')
Esempio n. 6
0
def WriteJobExecuteNbody(file, iabs, icut, combination, main, tagName, tagIndex, condition):

    obs = condition.observable

    # Case of N
    if obs.name in ["N", "vN", "sN", "sdN", "dsN", "dvN", "vdN", "dN", "rN"]:
        file.write("    unsigned int Ncounter=0;\n")

    # ALL reserved word
    if len(combination) == 1 and combination.ALL:
        if obs.combination in [CombinationType.SUMSCALAR, CombinationType.DIFFSCALAR]:
            file.write("    Double_t value=0;\n")
        else:
            file.write("    ParticleBaseFormat q;\n")

    # Determine if same particle in loop
    redundancies = False
    if len(combination) > 1:
        for i in range(len(combination)):
            for j in range(len(combination)):
                if i == j:
                    continue
                if combination[i].particle.IsThereCommonPart(combination[j].particle):
                    redundancies = True

    # FOR loop
    WriteJobLoop(file, iabs, icut, combination, redundancies, main)

    # Checking redundancies
    WriteJobSameCombi(file, iabs, icut, combination, redundancies, main)

    # Getting number of combinations
    if obs.name in ["N", "vN", "sN", "sdN", "dsN", "dvN", "vdN", "dN", "rN"]:
        file.write("      Ncounter++;\n")
        for combi in range(len(combination)):
            file.write("    }\n")
        file.write("    if ( Ncounter ")
        file.write(
            OperatorType.convert2cpp(condition.operator)
            + str(condition.threshold)
            + ") "
            + tagName
            + "["
            + str(tagIndex)
            + "]=true;\n"
        )

    # Adding values
    else:
        WriteJobSum(file, iabs, icut, combination, main, tagName, tagIndex, condition)
        for combi in range(len(combination)):
            file.write("    }\n")
Esempio n. 7
0
 def GetStringDisplay(self):
     msg = self.observable.name
     if len(self.parts) != 0:
         msg += " ("
     for i in range(len(self.parts)):
         msg += " " + self.parts[i].GetStringDisplay()
         if i != (len(self.parts) - 1):
             msg += " ,"
     if len(self.parts) != 0:
         msg += " )"
     msg += " " + OperatorType.convert2string(self.operator)
     msg += " " + str(self.threshold)
     return msg
Esempio n. 8
0
 def GetStringDisplay(self):
     msg=self.observable.name
     if len(self.parts)!=0:
         msg+=" ("
     for i in range(len(self.parts)):
         msg+=" "+self.parts[i].GetStringDisplay()
         if i!=(len(self.parts)-1):
             msg+=" ,"
     if len(self.parts)!=0:
         msg+=" )"
     msg+=" "+OperatorType.convert2string(self.operator)
     msg+=" "+str(self.threshold)
     return msg
Esempio n. 9
0
def WriteJobExecuteNbody(file, iabs, icut, combination, main, tagName,
                         tagIndex, condition):

    obs = condition.observable

    # Case of N
    if obs.name in ['N', 'vN', 'sN', 'sdN', 'dsN', 'dvN', 'vdN', 'dN', 'rN']:
        file.write('    unsigned int Ncounter=0;\n')

    # ALL reserved word
    if len(combination) == 1 and combination.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    Double_t value=0;\n')
        else:
            file.write('    ParticleBaseFormat q;\n')

    # Determine if same particle in loop
    redundancies = False
    if len(combination) > 1:
        for i in range(len(combination)):
            for j in range(len(combination)):
                if i == j:
                    continue
                if combination[i].particle.IsThereCommonPart(
                        combination[j].particle):
                    redundancies = True

    # FOR loop
    WriteJobLoop(file, iabs, icut, combination, redundancies, main)

    # Checking redundancies
    WriteJobSameCombi(file, iabs, icut, combination, redundancies, main)

    # Getting number of combinations
    if obs.name in ['N', 'vN', 'sN', 'sdN', 'dsN', 'dvN', 'vdN', 'dN', 'rN']:
        file.write('      Ncounter++;\n')
        for combi in range(len(combination)):
            file.write('    }\n')
        file.write('    if ( Ncounter ')
        file.write(OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') '+tagName+'['+str(tagIndex)+']=true;\n')

    # Adding values
    else:
        WriteJobSum(file, iabs, icut, combination, main, tagName, tagIndex,
                    condition)
        for combi in range(len(combination)):
            file.write('    }\n')
Esempio n. 10
0
def WriteJobExecuteNbody(file,iabs,combination,main,tagName,tagIndex,condition):

    obs = condition.observable
    
    # Case of N
    if obs.name in ['N','vN','sN','sdN','dsN','dvN','vdN','dN','rN']:
        file.write('    unsigned int Ncounter=0;\n')

    # ALL reserved word
    if len(combination)==1 and combination.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    Double_t value=0;\n')
        else:
            file.write('    ParticleBaseFormat q;\n')

    # Determine if same particle in loop
    redundancies = False
    if len(combination)>1:
        for i in range(len(combination)):
            for j in range(len(combination)):
                if i==j:
                    continue
                if combination[i].particle.IsThereCommonPart(combination[j].particle):
                    redundancies = True

    # FOR loop
    WriteJobLoop(file,iabs,combination,redundancies,main)

    # Checking redundancies
    WriteJobSameCombi(file,iabs,combination,redundancies,main)

    # Getting number of combinations
    if obs.name in ['N','vN','sN','sdN','dsN','dvN','vdN','dN','rN']:
        file.write('      Ncounter++;\n')
        for combi in range(len(combination)):
            file.write('    }\n')
        file.write('    if ( Ncounter ')
        file.write(OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') '+tagName+'['+str(tagIndex)+']=true;\n')

    # Adding values    
    else:
        WriteJobSum(file,iabs,combination,main,tagName,tagIndex,condition)
        for combi in range(len(combination)):
            file.write('    }\n')
Esempio n. 11
0
def WriteJobSum2N(file, iabs, icut, combi1, combi2, main, tagName, tagIndex, condition, iterator1, iterator2):

    cut = main.selection[iabs]
    obs = condition.observable

    # Getting container name
    containers1 = []
    for item in combi1:
        containers1.append(InstanceName.Get("P_" + item.name + cut.rank + cut.statuscode))

    containers2 = []
    for item in combi2:
        containers2.append(InstanceName.Get("P_" + item.name + cut.rank + cut.statuscode))

    # Case of one particle/multiparticle
    if len(combi1) == 1 and len(combi2) == 1:
        if main.mode == MA5RunningType.PARTON:
            TheObs = obs.code_parton[:-2]
        elif main.mode == MA5RunningType.HADRON:
            TheObs = obs.code_hadron[:-2]
        else:
            TheObs = obs.code_reco[:-2]
        file.write("    if (")
        file.write(
            containers1[0]
            + "["
            + iterator1
            + "[0]]->"
            + TheObs
            + "("
            + containers2[0]
            + "["
            + iterator2
            + "[0]])"
            + OperatorType.convert2cpp(condition.operator)
            + str(condition.threshold)
            + ") {"
            + tagName
            + "["
            + str(tagIndex)
            + "]=true; break;}\n"
        )
        return

    # Operation : sum or diff
    if obs.combination in [CombinationType.SUMSCALAR, CombinationType.SUMVECTOR, CombinationType.DEFAULT]:
        oper_string = "+"
    else:
        oper_string = "-"

    # Vector sum/diff
    if obs.combination in [CombinationType.DEFAULT, CombinationType.SUMVECTOR, CombinationType.DIFFVECTOR]:

        # First part
        file.write("    ParticleBaseFormat q1;\n")
        for ind in range(0, len(combi1)):
            file.write(
                "    q1"
                + oper_string
                + "="
                + containers1[ind]
                + "[+"
                + iterator1
                + "["
                + str(ind)
                + "]]->"
                + "momentum();\n"
            )

        # Second part
        file.write("    ParticleBaseFormat q2;\n")
        for ind in range(0, len(combi2)):
            file.write(
                "    q2"
                + oper_string
                + "="
                + containers2[ind]
                + "["
                + iterator2
                + "["
                + str(ind)
                + "]]->"
                + "momentum();\n"
            )

        # Result
        if main.mode == MA5RunningType.PARTON:
            TheObs = obs.code_parton[:-2]
        elif main.mode == MA5RunningType.HADRON:
            TheObs = obs.code_hadron[:-2]
        else:
            TheObs = obs.code_reco[:-2]
        file.write(
            "    if (q1."
            + TheObs
            + "(q2)"
            + ""
            + OperatorType.convert2cpp(condition.operator)
            + str(condition.threshold)
            + ") {"
            + tagName
            + "["
            + str(tagIndex)
            + "]=true; break;}\n"
        )
Esempio n. 12
0
def WriteJobSum(file,
                iabs,
                icut,
                combination,
                main,
                tagName,
                tagIndex,
                condition,
                iterator='ind'):

    cut = main.selection[iabs]
    obs = condition.observable

    # Getting container name
    containers = []
    for item in combination:
        containers.append(InstanceName.Get('P_'+\
                                           item.name+cut.rank+cut.statuscode))

    # Case of one particle/multiparticle
    if len(combination) == 1:
        file.write('    if (')
        file.write(containers[0]+'['+iterator+'[0]]->' +\
                   obs.code(main.mode) +\
                   OperatorType.convert2cpp(condition.operator) +\
                   str(condition.threshold) +\
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
        return

    # Operation : sum or diff
    if obs.combination in [CombinationType.SUMSCALAR,\
                           CombinationType.SUMVECTOR,\
                           CombinationType.DEFAULT]:
        oper_string = '+'
    else:
        oper_string = '-'

    # Scalar sum/diff
    if obs.combination in [CombinationType.SUMSCALAR,\
                           CombinationType.DIFFSCALAR]:
        file.write('    if ((')
        variables = []
        for ind in range(len(combination)):
            variables.append(containers[ind]+'['+iterator+'['+str(ind)+']]->'+\
                             ''+\
            obs.code(main.mode))
        file.write(oper_string.join(variables))
        file.write(')'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')

    # Vector sum/diff
    elif obs.combination in [CombinationType.DEFAULT,\
                             CombinationType.SUMVECTOR,\
                             CombinationType.DIFFVECTOR]:
        file.write('    ParticleBaseFormat q;\n')
        for ind in range(len(combination)):
            file.write('    q'+oper_string+'='+containers[ind]+'['+iterator+'['+str(ind)+']]->'+\
                             'momentum();\n')
        file.write('    if (q.')
        file.write(obs.code(main.mode)+\
                   ''+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
    # ratio
    elif obs.combination==CombinationType.RATIO and \
        len(combination)==2:
        file.write('    if (((')
        file.write(containers[0]+'['+iterator+'[0]]->'+\
                   obs.code(main.mode)+\
                   '-'+\
                   containers[1]+'['+iterator+'[1]]->'+\
                   obs.code(main.mode)+\
                   ') / ('+\
                   containers[0]+'['+iterator+'[0]]->'+\
                   obs.code(main.mode)+\
                   ')')
        file.write(')'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
Esempio n. 13
0
def WriteJobExecute2Nbody(file, iabs, icut, combi1, combi2, main, tagName,
                          tagIndex, condition):

    obs = condition.observable

    # ALL reserved word for the first argument
    if len(combi1) == 1 and combi1.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    Double_t value1=0;\n')
        else:
            file.write('    ParticleBaseFormat q1;\n')

    # ALL reserved word for the second argument
    if len(combi2) == 1 and combi2.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    Double_t value2=0;\n')
        else:
            file.write('    ParticleBaseFormat q2;\n')

    # Determine if same particle in first combi
    redundancies1 = False
    if len(combi1) > 1:
        for i in range(len(combi1)):
            for j in range(len(combi1)):
                if i == j:
                    continue
                if combi1[i].particle.IsThereCommonPart(combi1[j].particle):
                    redundancies = True

    # FOR loop for first combi
    WriteJobLoop(file, iabs, icut, combi1, redundancies1, main, 'a')

    # Checking redundancies for second combi
    WriteJobSameCombi(file, iabs, icut, combi1, redundancies1, main, 'a')

    # Determine if same particle in second combi
    redundancies2 = False
    if len(combi2) > 1:
        for i in range(len(combi2)):
            for j in range(len(combi2)):
                if i == j:
                    continue
                if combi2[i].particle.IsThereCommonPart(combi2[j].particle):
                    redundancies = True

    # FOR loop for second combi
    WriteJobLoop(file, iabs, icut, combi2, redundancies2, main, 'b')

    # Checking redundancies for second combi
    WriteJobSameCombi(file, iabs, icut, combi2, redundancies2, main, 'b')

    # ALL reserved word
    if len(combi1) == 1 and combi1.ALL:
        pass

    # Getting number of combinations
    if obs is ObservableType.N:
        file.write('      Ncounter++;\n')
        for combi in range(len(combination)):
            file.write('    }\n')
            file.write('    }\n')
        file('    if ( Ncounter ')
        file.write(OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') '+tagName+'['+tagIndex+']=true;\n')

    # Normal case
    else:

        WriteJobSum2N(file, iabs, icut, combi1, combi2, main, tagName,
                      tagIndex, condition, 'a', 'b')
        for ind in range(len(combi1)):
            file.write('    }\n')
        for ind in range(len(combi2)):
            file.write('    }\n')
Esempio n. 14
0
def WriteCutWith0Arg(file, main, iabs, icut, tagName, tagIndex, condition):
    file.write("  " + tagName + "[" + str(tagIndex) + "] = (")
    file.write(condition.observable.code(main.mode) + " ")
    file.write(OperatorType.convert2cpp(condition.operator) + " ")
    file.write(str(condition.threshold))
    file.write(" );\n")
Esempio n. 15
0
def WriteJobExecute2Nbody(file,iabs,combi1,combi2,main,tagName,tagIndex,condition):

    obs = condition.observable

    # ALL reserved word for the first argument
    if len(combi1)==1 and combi1.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    Double_t value1=0;\n')
        else:
            file.write('    ParticleBaseFormat q1;\n')
    
    # ALL reserved word for the second argument
    if len(combi2)==1 and combi2.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    Double_t value2=0;\n')
        else:
            file.write('    ParticleBaseFormat q2;\n')

    # Determine if same particle in first combi
    redundancies1 = False
    if len(combi1)>1:
        for i in range(len(combi1)):
            for j in range(len(combi1)):
                if i==j:
                    continue
                if combi1[i].particle.IsThereCommonPart(combi1[j].particle):
                    redundancies = True

    # FOR loop for first combi
    WriteJobLoop(file,iabs,combi1,redundancies1,main,'a')

    # Checking redundancies for second combi
    WriteJobSameCombi(file,iabs,combi1,redundancies1,main,'a')
            
    # Determine if same particle in second combi
    redundancies2 = False
    if len(combi2)>1:
        for i in range(len(combi2)):
            for j in range(len(combi2)):
                if i==j:
                    continue
                if combi2[i].particle.IsThereCommonPart(combi2[j].particle):
                    redundancies = True

    # FOR loop for second combi
    WriteJobLoop(file,iabs,combi2,redundancies2,main,'b')

    # Checking redundancies for second combi
    WriteJobSameCombi(file,iabs,combi2,redundancies2,main,'b')

    # ALL reserved word
    if len(combi1)==1 and combi1.ALL:
        pass

    # Getting number of combinations
    if obs is ObservableType.N:
        file.write('      Ncounter++;\n')
        for combi in range(len(combination)):
            file.write('    }\n')
            file.write('    }\n')
        file('    if ( Ncounter ')
        file.write(OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') '+tagName+'['+tagIndex+']=true;\n')

    # Normal case
    else :

        WriteJobSum2N(file,iabs,combi1,combi2,main,tagName,tagIndex,condition,'a','b')
        for ind in range(len(combi1)):
            file.write('    }\n')
        for ind in range(len(combi2)):
            file.write('    }\n')
Esempio n. 16
0
def WriteCutWith0Arg(file,main,iabs,tagName,tagIndex,condition):
    file.write('  '+tagName+'['+str(tagIndex)+'] = (')
    file.write(condition.observable.code(main.mode)+' ')
    file.write(OperatorType.convert2cpp(condition.operator)+' ')
    file.write(str(condition.threshold))
    file.write(' );\n')
Esempio n. 17
0
def WriteJobSum(file, iabs, icut, combination, main, tagName, tagIndex, condition, iterator="ind"):

    cut = main.selection[iabs]
    obs = condition.observable

    # Getting container name
    containers = []
    for item in combination:
        containers.append(InstanceName.Get("P_" + item.name + cut.rank + cut.statuscode))

    # Case of one particle/multiparticle
    if len(combination) == 1:
        file.write("    if (")
        file.write(
            containers[0]
            + "["
            + iterator
            + "[0]]->"
            + obs.code(main.mode)
            + OperatorType.convert2cpp(condition.operator)
            + str(condition.threshold)
            + ") {"
            + tagName
            + "["
            + str(tagIndex)
            + "]=true; break;}\n"
        )
        return

    # Operation : sum or diff
    if obs.combination in [CombinationType.SUMSCALAR, CombinationType.SUMVECTOR, CombinationType.DEFAULT]:
        oper_string = "+"
    else:
        oper_string = "-"

    # Scalar sum/diff
    if obs.combination in [CombinationType.SUMSCALAR, CombinationType.DIFFSCALAR]:
        file.write("    if ((")
        variables = []
        for ind in range(len(combination)):
            variables.append(containers[ind] + "[" + iterator + "[" + str(ind) + "]]->" + "" + obs.code(main.mode))
        file.write(oper_string.join(variables))
        file.write(
            ")"
            + OperatorType.convert2cpp(condition.operator)
            + str(condition.threshold)
            + ") {"
            + tagName
            + "["
            + str(tagIndex)
            + "]=true; break;}\n"
        )

    # Vector sum/diff
    elif obs.combination in [CombinationType.DEFAULT, CombinationType.SUMVECTOR, CombinationType.DIFFVECTOR]:
        file.write("    ParticleBaseFormat q;\n")
        for ind in range(len(combination)):
            file.write(
                "    q"
                + oper_string
                + "="
                + containers[ind]
                + "["
                + iterator
                + "["
                + str(ind)
                + "]]->"
                + "momentum();\n"
            )
        file.write("    if (q.")
        file.write(
            obs.code(main.mode)
            + ""
            + OperatorType.convert2cpp(condition.operator)
            + str(condition.threshold)
            + ") {"
            + tagName
            + "["
            + str(tagIndex)
            + "]=true; break;}\n"
        )
    # ratio
    elif obs.combination == CombinationType.RATIO and len(combination) == 2:
        file.write("    if (((")
        file.write(
            containers[0]
            + "["
            + iterator
            + "[0]]->"
            + obs.code(main.mode)
            + "-"
            + containers[1]
            + "["
            + iterator
            + "[1]]->"
            + obs.code(main.mode)
            + ") / ("
            + containers[0]
            + "["
            + iterator
            + "[0]]->"
            + obs.code(main.mode)
            + ")"
        )
        file.write(
            ")"
            + OperatorType.convert2cpp(condition.operator)
            + str(condition.threshold)
            + ") {"
            + tagName
            + "["
            + str(tagIndex)
            + "]=true; break;}\n"
        )
Esempio n. 18
0
def WriteJobExecuteNbody(file,iabs,combi1,main,container,tagName,tagIndex,condition):

    obs = condition.observable
    cut = main.selection[iabs]

    # ALL reserved word for the first argument
    if len(combi1)==1 and combi1.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    Double_t value1=0;\n')
        else:
            file.write('    ParticleBaseFormat q1;\n')

    # Determine if same particle in first combi
    redundancies1 = False
    if len(combi1)>1:
        for i in range(len(combi1)):
            for j in range(len(combi1)):
                if i==j:
                    continue
                if combi1[i].particle.IsThereCommonPart(combi1[j].particle):
                    redundancies = True

    # FOR loop for first combi
    WriteJobLoop(file,iabs,combi1,redundancies1,main,'a')

    # Checking redundancies for second combi
    WriteJobSameCombi(file,iabs,combi1,redundancies1,main,'a')


    # Getting container name
    containers1=[]
    for item in combi1:
        containers1.append(InstanceName.Get('P_'+\
                                           item.name+cut.rank+cut.statuscode))

    # Case of one particle/multiparticle
    if len(combi1)==1:
        file.write('    if (')
        file.write(containers1[0]+'[a]->' +\
                   'dr('+container+'[muf])' +\
                   OperatorType.convert2cpp(condition.operator) +\
                   str(condition.threshold) +\
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')

        for ind in range(len(combi1)):
            file.write('    }\n')

        return

    # Operation : sum or diff
    if obs.combination in [CombinationType.SUMSCALAR,\
                           CombinationType.SUMVECTOR,\
                           CombinationType.DEFAULT]:
        oper_string = '+'
    else:
        oper_string = '-'

    # Vector sum/diff
    if obs.combination in [CombinationType.DEFAULT,\
                             CombinationType.SUMVECTOR,\
                             CombinationType.DIFFVECTOR]:

        # First part
        file.write('    ParticleBaseFormat q1;\n')
        for ind in range(0,len(combi1)):
            file.write('    q1'+oper_string+'='+\
                       containers1[ind]+'[a['+str(ind)+']]->'+\
                       'momentum();\n')

        # Result    
        file.write('    if (q1.')
        if obs.name in ['DELTAR','vDELTAR']:
            file.write('dr('+container+'[muf])'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
        else:
            file.write(obs.code(main.mode)+\
                   '('+container+'[muf])'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')

    for ind in range(len(combi1)):
        file.write('    }\n')
Esempio n. 19
0
def WriteJobSum(file,iabs,combination,main,tagName,tagIndex,condition,iterator='ind'):

    cut = main.selection[iabs]
    obs = condition.observable
    
    # Getting container name
    containers=[]
    for item in combination:
        containers.append(InstanceName.Get('P_'+\
                                           item.name+cut.rank+cut.statuscode))
        
    # Case of one particle/multiparticle
    if len(combination)==1:
        file.write('    if (')
        file.write(containers[0]+'['+iterator+'[0]]->' +\
                   obs.code(main.mode) +\
                   OperatorType.convert2cpp(condition.operator) +\
                   str(condition.threshold) +\
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
        return

    # Operation : sum or diff
    if obs.combination in [CombinationType.SUMSCALAR,\
                           CombinationType.SUMVECTOR,\
                           CombinationType.DEFAULT]:
        oper_string = '+'
    else:
        oper_string = '-'

    # Scalar sum/diff
    if obs.combination in [CombinationType.SUMSCALAR,\
                           CombinationType.DIFFSCALAR]:
        file.write('    if ((')
        variables=[]
        for ind in range(len(combination)):
            variables.append(containers[ind]+'['+iterator+'['+str(ind)+']]->'+\
                             ''+\
            obs.code(main.mode))
        file.write(oper_string.join(variables))
        file.write(')'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')

    # Vector sum/diff
    elif obs.combination in [CombinationType.DEFAULT,\
                             CombinationType.SUMVECTOR,\
                             CombinationType.DIFFVECTOR]:
        file.write('    ParticleBaseFormat q;\n')
        for ind in range(len(combination)):
            file.write('    q'+oper_string+'='+containers[ind]+'['+iterator+'['+str(ind)+']]->'+\
                             'momentum();\n')
        file.write('    if (q.')
        file.write(obs.code(main.mode)+\
                   ''+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
    # ratio       
    elif obs.combination==CombinationType.RATIO and \
        len(combination)==2:
        file.write('    if (((')
        file.write(containers[0]+'['+iterator+'[0]]->'+\
                   obs.code(main.mode)+\
                   '-'+\
                   containers[1]+'['+iterator+'[1]]->'+\
                   obs.code(main.mode)+\
                   ') / ('+\
                   containers[0]+'['+iterator+'[0]]->'+\
                   obs.code(main.mode)+\
                   ')')
        file.write(')'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
Esempio n. 20
0
def WriteJobExecuteNbody(file, iabs, icut, combi1, main, container, tagName,
                         tagIndex, condition):

    obs = condition.observable
    cut = main.selection[iabs]

    # ALL reserved word for the first argument
    if len(combi1) == 1 and combi1.ALL:
        if obs.combination in [CombinationType.SUMSCALAR,\
                               CombinationType.DIFFSCALAR]:
            file.write('    MAdouble64 value1=0;\n')
        else:
            file.write('    ParticleBaseFormat q1;\n')

    # Determine if same particle in first combi
    redundancies1 = False
    if len(combi1) > 1:
        for i in range(len(combi1)):
            for j in range(len(combi1)):
                if i == j:
                    continue
                if combi1[i].particle.IsThereCommonPart(combi1[j].particle):
                    redundancies = True

    # FOR loop for first combi
    WriteJobLoop(file, iabs, icut, combi1, redundancies1, main, 'a')

    # Checking redundancies for second combi
    WriteJobSameCombi(file, iabs, icut, combi1, redundancies1, main, 'a')

    # Getting container name
    containers1 = []
    for item in combi1:
        containers1.append(InstanceName.Get('P_'+\
                                           item.name+cut.rank+cut.statuscode))

    # Case of one particle/multiparticle
    if len(combi1) == 1:
        file.write('    if (')
        if main.mode == MA5RunningType.PARTON:
            TheObs = obs.code_parton[:-2]
        elif main.mode == MA5RunningType.HADRON:
            TheObs = obs.code_hadron[:-2]
        else:
            TheObs = obs.code_reco[:-2]
        file.write(containers1[0]+'[a]->' +\
                   TheObs+'('+container+'[muf])' +\
                   OperatorType.convert2cpp(condition.operator) +\
                   str(condition.threshold) +\
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')

        for ind in range(len(combi1)):
            file.write('    }\n')

        return

    # Operation : sum or diff
    if obs.combination in [CombinationType.SUMSCALAR,\
                           CombinationType.SUMVECTOR,\
                           CombinationType.DEFAULT]:
        oper_string = '+'
    else:
        oper_string = '-'

    # Vector sum/diff
    if obs.combination in [CombinationType.DEFAULT,\
                             CombinationType.SUMVECTOR,\
                             CombinationType.DIFFVECTOR]:

        # First part
        file.write('    ParticleBaseFormat q1;\n')
        for ind in range(0, len(combi1)):
            TheOper = '+'
            if ind != 0:
                TheOper = oper_string
            file.write('    q1'+TheOper+'='+\
                       containers1[ind]+'[a['+str(ind)+']]->'+\
                       'momentum();\n')

        # Result
        file.write('    if (q1.')
        if obs.name in ['DELTAR', 'vDELTAR', 'DPHI_0_PI', 'DPHI_0_2PI']:
            if main.mode == MA5RunningType.PARTON:
                TheObs = obs.code_parton[:-2]
            elif main.mode == MA5RunningType.HADRON:
                TheObs = obs.code_hadron[:-2]
            else:
                TheObs = obs.code_reco[:-2]
            file.write(TheObs+'('+container+'[muf])'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')
        else:
            file.write(obs.code(main.mode)+\
                   '('+container+'[muf])'+ OperatorType.convert2cpp(condition.operator) + \
                   str(condition.threshold) +   \
                   ') {'+tagName+'['+str(tagIndex)+']=true; break;}\n')

    for ind in range(len(combi1)):
        file.write('    }\n')
Esempio n. 21
0
def WriteCutWith0Arg(file, main, iabs, icut, tagName, tagIndex, condition):
    file.write('  ' + tagName + '[' + str(tagIndex) + '] = (')
    file.write(condition.observable.code(main.mode) + ' ')
    file.write(OperatorType.convert2cpp(condition.operator) + ' ')
    file.write(str(condition.threshold))
    file.write(' );\n')