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
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')
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')
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')
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")
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
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
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')
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')
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" )
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')
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')
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")
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')
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')
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" )
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')
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')
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')
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')