Esempio n. 1
0
def myAnalyzer( dictSamples, listCuts, signalName, RANGE ):

	if (( len(dictSamples) == 1 ) and ( signalName not in ['RPVStopStopToJets_'+args.decay+'_M-'+str(mass)] )): outputFileName = 'Rootfiles/RUNMiniBoostedAnalysis_'+grooming+'_'+signalName+'_'+RANGE+'_v03p1.root' 
	else: outputFileName = 'Rootfiles/RUNMiniBoostedAnalysis_'+grooming+'_'+signalName+'_v03p1.root' 
	outputFile = TFile( outputFileName, 'RECREATE' )

	###################################### output Tree
	#tree = TTree('RUNAFinTree'+grooming, 'RUNAFinTree'+grooming)
	#AvgMass = array( 'f', [ 0. ] )
	#tree.Branch( 'AvgMass', AvgMass, 'AvgMass/F' )
	#Scale = array( 'f', [ 0. ] )
	#tree.Branch( 'Scale', Scale, 'Scale/F' )


	################################################################################################## Histos
	massBins = 500
	massXmin = 0.
	massXmax = 500.
	listOfOptions = [ [ j,k] for j in range(len(listCuts)-1) for k in range(1, len(listCuts) ) if k > j ]

	for sam in dictSamples:
		allHistos[ "cutFlow_"+sam ] = TH1F( "cutflow_"+sam, "cutflow_"+sam, len(listCuts), 0., len(listCuts) )
		allHistos[ "HT_"+sam ] = TH1F( "HT_"+sam, "HT_"+sam, 5000, 0., 5000 )
		allHistos[ "HT_"+sam ].Sumw2()
		allHistos[ "MET_"+sam ] = TH1F( "MET_"+sam, "MET_"+sam, 500, 0., 500 )
		allHistos[ "MET_"+sam ].Sumw2()
		allHistos[ "massAve_"+sam ] = TH1F( "massAve_"+sam, "massAve_"+sam, 500, 0., 500 )
		allHistos[ "massAve_"+sam ].Sumw2()
		allHistos[ "numJets_"+sam ] = TH1F( "numJets_"+sam, "numJets_"+sam, 20, 0., 20 )
		allHistos[ "numJets_"+sam ].Sumw2()
		allHistos[ "jet1Pt_"+sam ] = TH1F( "jet1Pt_"+sam, "jet1Pt_"+sam, 2000, 0., 2000 )
		allHistos[ "jet1Pt_"+sam ].Sumw2()
		allHistos[ "jet2Pt_"+sam ] = TH1F( "jet2Pt_"+sam, "jet2Pt_"+sam, 2000, 0., 2000 )
		allHistos[ "jet2Pt_"+sam ].Sumw2()
		allHistos[ "jet1CosThetaStar_"+sam ] = TH1F( "jet1CosThetaStar_"+sam, "jet1CosThetaStar_"+sam, 20, 0., 1 )
		allHistos[ "jet1CosThetaStar_"+sam ].Sumw2()
		allHistos[ "jet2CosThetaStar_"+sam ] = TH1F( "jet2CosThetaStar_"+sam, "jet2CosThetaStar_"+sam, 20, 0., 1 )
		allHistos[ "jet2CosThetaStar_"+sam ].Sumw2()
		allHistos[ "jet1Tau32_"+sam ] = TH1F( "jet1Tau32_"+sam, "jet1Tau32_"+sam, 20, 0., 1 )
		allHistos[ "jet1Tau32_"+sam ].Sumw2()
		allHistos[ "jet2Tau32_"+sam ] = TH1F( "jet2Tau32_"+sam, "jet2Tau32_"+sam, 20, 0., 1 )
		allHistos[ "jet2Tau32_"+sam ].Sumw2()
		if 'high' in args.RANGE:
			allHistos[ "jet1Tau31_"+sam ] = TH1F( "jet1Tau31_"+sam, "jet1Tau31_"+sam, 20, 0., 1 )
			allHistos[ "jet1Tau31_"+sam ].Sumw2()
			allHistos[ "jet2Tau31_"+sam ] = TH1F( "jet2Tau31_"+sam, "jet2Tau31_"+sam, 20, 0., 1 )
			allHistos[ "jet2Tau31_"+sam ].Sumw2()
		allHistos[ "jet1SubjetPtRatio_"+sam ] = TH1F( "jet1SubjetPtRatio_"+sam, "jet1SubjetPtRatio_"+sam, 20, 0., 1 )
		allHistos[ "jet1SubjetPtRatio_"+sam ].Sumw2()
		allHistos[ "jet2SubjetPtRatio_"+sam ] = TH1F( "jet2SubjetPtRatio_"+sam, "jet2SubjetPtRatio_"+sam, 20, 0., 1 )
		allHistos[ "jet2SubjetPtRatio_"+sam ].Sumw2()
		allHistos[ "deltaEtaDijet_n-1_"+sam ] = TH1F( "deltaEtaDijet_n-1_"+sam, "deltaEtaDijet_n-1_"+sam, 50, 0., 5 )
		allHistos[ "deltaEtaDijet_n-1_"+sam ].Sumw2()
		allHistos[ "prunedMassAsym_n-1_"+sam ] = TH1F( "prunedMassAsym_n-1_"+sam, "prunedMassAsym_n-1_"+sam, 20, 0., 1 )
		allHistos[ "prunedMassAsym_n-1_"+sam ].Sumw2()
		allHistos[ "jet1Tau21_n-1_"+sam ] = TH1F( "jet1Tau21_n-1_"+sam, "jet1Tau21_n-1_"+sam, 20, 0., 1 )
		allHistos[ "jet1Tau21_n-1_"+sam ].Sumw2()
		allHistos[ "jet2Tau21_n-1_"+sam ] = TH1F( "jet2Tau21_n-1_"+sam, "jet2Tau21_n-1_"+sam, 20, 0., 1 )
		allHistos[ "jet2Tau21_n-1_"+sam ].Sumw2()
		if 'low' in args.RANGE:
			allHistos[ "jet1Tau31_n-1_"+sam ] = TH1F( "jet1Tau31_n-1_"+sam, "jet1Tau31_n-1_"+sam, 20, 0., 1 )
			allHistos[ "jet1Tau31_n-1_"+sam ].Sumw2()
			allHistos[ "jet2Tau31_n-1_"+sam ] = TH1F( "jet2Tau31_n-1_"+sam, "jet2Tau31_n-1_"+sam, 20, 0., 1 )
			allHistos[ "jet2Tau31_n-1_"+sam ].Sumw2()

		for var in listCuts:
			if 'deltaEta' in var[0]: 
				allHistos[ var[0]+'_'+sam ] = TH1F( var[0]+'_'+sam, var[0]+'_'+sam, 50, 0., 5. )
				for var1 in listCuts: allHistos[ var[0]+'_'+var1[0]+"_"+sam ] = TH1F( var[0]+'_'+var1[0]+"_"+sam, var[0]+'_'+var1[0]+"_"+sam, 50, 0., 5. )
			else: 
				allHistos[ var[0]+'_'+sam ] = TH1F( var[0]+'_'+sam, var[0]+'_'+sam, 20, 0., 1. )
				for var1 in listCuts: allHistos[ var[0]+'_'+var1[0]+"_"+sam ] = TH1F( var[0]+'_'+var1[0]+"_"+sam, var[0]+'_'+var1[0]+"_"+sam, 20, 0., 1. )
			allHistos[ var[0]+'_'+sam ].Sumw2()
			allHistos[ "massAve_"+var[0]+'_'+sam ] = TH1F( "massAve_"+var[0]+'_'+sam, "massAve_"+var[0]+'_'+sam, massBins, massXmin, massXmax )
			allHistos[ "massAve_"+var[0]+'_'+sam ].Sumw2()

			allHistos[ "HT_"+var[0]+"_"+sam ] = TH1F( "HT_"+var[0]+"_"+sam, "HT_"+var[0]+"_"+sam, 5000, 0., 5000 )
			allHistos[ "HT_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "MET_"+var[0]+"_"+sam ] = TH1F( "MET_"+var[0]+"_"+sam, "MET_"+var[0]+"_"+sam, 500, 0., 500 )
			allHistos[ "MET_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "numJets_"+var[0]+"_"+sam ] = TH1F( "numJets_"+var[0]+"_"+sam, "numJets_"+var[0]+"_"+sam, 20, 0., 20 )
			allHistos[ "numJets_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "jet1Pt_"+var[0]+"_"+sam ] = TH1F( "jet1Pt_"+var[0]+"_"+sam, "jet1Pt_"+var[0]+"_"+sam, 2000, 0., 2000 )
			allHistos[ "jet1Pt_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "jet2Pt_"+var[0]+"_"+sam ] = TH1F( "jet2Pt_"+var[0]+"_"+sam, "jet2Pt_"+var[0]+"_"+sam, 2000, 0., 2000 )
			allHistos[ "jet2Pt_"+var[0]+"_"+sam ].Sumw2()

		for ind in listOfOptions:
			tmpName = listCuts[ind[0]][0]+'Vs'+listCuts[ind[1]][0]+'_'+sam
			allHistos[ tmpName ] = TH2F( tmpName, tmpName, 
					(50 if 'deltaEta' in listCuts[ind[0]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[0]][0] else 1. ),
					(50 if 'deltaEta' in listCuts[ind[1]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[1]][0] else 1. ) 
					)
			allHistos[ tmpName ].Sumw2()

		tmpNameSam = listCuts[-2][0]+'Vs'+listCuts[-1][0]+'_'+sam
		allHistos[ "massAve_"+tmpNameSam+'_ABCDProj' ] = TH1F( "massAve_"+tmpNameSam+'_ABCDProj', "massAve_"+tmpNameSam+'_ABCDProj', massBins, massXmin, massXmax )
		allHistos[ "massAve_"+tmpNameSam+'_ABCDProj' ].Sumw2()
		allHistos[ "massAve_"+tmpNameSam+'_BC' ] = TH1F( "massAve_"+tmpNameSam+'_BC', "massAve_"+tmpNameSam+'_BC', massBins, massXmin, massXmax )
		allHistos[ "massAve_"+tmpNameSam+'_BC' ].Sumw2()
		allHistos[ tmpNameSam+'_Bkg' ] = TH2F( tmpNameSam+'_Bkg', tmpNameSam+'_Bkg', 
				(50 if 'deltaEta' in listCuts[-2][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-2][0] else 1. ),
				(50 if 'deltaEta' in listCuts[-1][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-1][0] else 1. ) 
				)
		allHistos[ tmpNameSam+'_Bkg' ].Sumw2()

		for k in [ 'A', 'B', 'C', 'D' ]:
			allHistos[ "massAve_"+tmpNameSam+'_'+k ] = TH1F( "massAve_"+tmpNameSam+'_'+k, "massAve_"+tmpNameSam+'_'+k, massBins, massXmin, massXmax )
			allHistos[ "massAve_"+tmpNameSam+'_'+k ].Sumw2()
			allHistos[ tmpNameSam+'_'+k ] = TH2F( tmpNameSam+'_'+k, tmpNameSam+'_'+k, 
					(50 if 'deltaEta' in listCuts[-2][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-2][0] else 1. ),
					(50 if 'deltaEta' in listCuts[-1][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-1][0] else 1. ) 
					)
			allHistos[ tmpNameSam+'_'+k ].Sumw2()
	#print allHistos

	################################################################################################## Running the Analysis
	for sample in dictSamples:

		####### Get GenTree 
		inputFile, events, numEntries = getTree( dictSamples[ sample ], ('BoostedAnalysisPlotsPuppi/RUNATree' if 'Puppi' in args.grooming else 'BoostedAnalysisPlots/RUNATree' ) )
		print '-'*40
		print '------> ', sample
		print '------> Number of events: '+str(numEntries)
		d = 0
		cutFlowList = OrderedDict()
		cutFlowList[ 'Process' ] = 0
		cutFlowList[ 'Preselection' ] = 0
		for k in listCuts: cutFlowList[ k[0] ] = 0

		for i in xrange(numEntries):
			events.GetEntry(i)

			#---- progress of the reading --------
			fraction = 10.*i/(1.*numEntries)
			if TMath.FloorNint(fraction) > d: print str(10*TMath.FloorNint(fraction))+'%' 
			d = TMath.FloorNint(fraction)
			#if ( i > 100000 ): break

			Run      = events.run
			Lumi     = events.lumi
			NumEvent = events.event
			puWeight	= events.puWeight
			lumiWeight	= events.lumiWeight
			HT		= events.HT
			MET		= events.MET
			numJets		= events.numJets
			massAve		= getattr( events, (args.grooming+"MassAve").replace('Puppi','') )
			jet1Pt          = events.jet1Pt
			jet2Pt          = events.jet2Pt
			jet1Eta          = events.jet1Eta
			jet2Eta          = events.jet2Eta
			jet1CosThetaStar	= events.jet1CosThetaStar
			jet2CosThetaStar	= events.jet2CosThetaStar
			#print 'Entry ', Run, ':', Lumi, ':', NumEvent

			if 'DATA' in sample: scale = 1
			#elif 'RPV' in sample: scale = 2606 * puWeight * SF
			else: scale = 2606 * puWeight * lumiWeight
			#else: scale = puWeight 
			cutFlowList[ 'Process' ] += scale

			#### test
			#if ( jet1Mass > 400 ) or ( jet2Mass > 400 ): print 'Entry ', Run, ':', Lumi, ':', NumEvent
			#if ( Lumi != tmpLumi ):
			#	newLumi += Lumi
			#	tmpLumi == Lumi
			#print Run/float(Lumi), Run, Lumi, Run/float(newLumi)
			
			
			#### Pre-selection
			HTCut = ( HT > 900 )
			dijetCut =  ( numJets > 1 )
			jetPtCut =  ( jet1Pt > 500 ) and ( jet2Pt > 450 )
			
			#if HTCut and dijetCut and jetPtCut:
			if HTCut and dijetCut :
				cutFlowList[ 'Preselection' ] += scale
				sigCutsList = []
				allHistos[ "HT_"+sam ].Fill( HT, scale )
				allHistos[ "MET_"+sam ].Fill( MET, scale )
				allHistos[ "massAve_"+sam ].Fill( massAve, scale )
				allHistos[ "numJets_"+sam ].Fill( numJets, scale )
				allHistos[ "jet1Pt_"+sam ].Fill( jet1Pt, scale )
				allHistos[ "jet2Pt_"+sam ].Fill( jet2Pt, scale )
				allHistos[ "prunedMassAsym_"+sam ].Fill( events.prunedMassAsym, scale )
				allHistos[ "deltaEtaDijet_"+sam ].Fill( events.deltaEtaDijet, scale )
				allHistos[ "jet1CosThetaStar_"+sam ].Fill( jet1CosThetaStar, scale )
				allHistos[ "jet2CosThetaStar_"+sam ].Fill( jet2CosThetaStar, scale )
				allHistos[ "jet1Tau21_"+sam ].Fill( events.jet1Tau21, scale )
				allHistos[ "jet2Tau21_"+sam ].Fill( events.jet2Tau21, scale )
				allHistos[ "jet1Tau31_"+sam ].Fill( events.jet1Tau31, scale )
				allHistos[ "jet2Tau31_"+sam ].Fill( events.jet2Tau31, scale )
				allHistos[ "jet1Tau32_"+sam ].Fill( events.jet1Tau32, scale )
				allHistos[ "jet2Tau32_"+sam ].Fill( events.jet2Tau32, scale )
				allHistos[ "jet1SubjetPtRatio_"+sam ].Fill( events.jet1SubjetPtRatio, scale )
				allHistos[ "jet2SubjetPtRatio_"+sam ].Fill( events.jet2SubjetPtRatio, scale )
				for var in listCuts:
					#allHistos[ var[0]+'_'+sample ].Fill( getattr( events, var[0] ), scale )
					nextCut = False
					if ( getattr( events, var[0] ) < var[1] ): nextCut = True 
					else: nextCut = False
					sigCutsList.append( nextCut )
					if all(sigCutsList): 
						allHistos[ 'massAve_'+var[0]+'_'+sample ].Fill( massAve, scale )
						allHistos[ 'jet1Tau21_'+var[0]+'_'+sample ].Fill( events.jet1Tau21, scale )
						allHistos[ 'jet2Tau21_'+var[0]+'_'+sample ].Fill( events.jet2Tau21, scale )
						if 'low' in args.RANGE: allHistos[ 'jet1Tau31_'+var[0]+'_'+sample ].Fill( events.jet1Tau31, scale )
						if 'low' in args.RANGE: allHistos[ 'jet2Tau31_'+var[0]+'_'+sample ].Fill( events.jet2Tau31, scale )
						allHistos[ 'prunedMassAsym_'+var[0]+'_'+sample ].Fill( events.prunedMassAsym, scale )
						allHistos[ 'deltaEtaDijet_'+var[0]+'_'+sample ].Fill( events.deltaEtaDijet, scale )
						allHistos[ "HT_"+var[0]+"_"+sam ].Fill( HT, scale )
						allHistos[ "MET_"+var[0]+"_"+sam ].Fill( MET, scale )
						allHistos[ "massAve_"+var[0]+"_"+sam ].Fill( massAve, scale )
						allHistos[ "numJets_"+var[0]+"_"+sam ].Fill( numJets, scale )
						allHistos[ "jet1Pt_"+var[0]+"_"+sam ].Fill( jet1Pt, scale )
						allHistos[ "jet2Pt_"+var[0]+"_"+sam ].Fill( jet2Pt, scale )
						cutFlowList[ var[0] ] += scale
				#### n-1 plots
				if ( 'low' in args.RANGE ):
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ) and ( getattr( events, listCuts[4][0] ) < listCuts[4][1] ): allHistos[ 'deltaEtaDijet_n-1_'+sample ].Fill( events.deltaEtaDijet, scale )
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ) and ( getattr( events, listCuts[5][0] ) < listCuts[5][1] ): allHistos[ 'prunedMassAsym_n-1_'+sample ].Fill( events.prunedMassAsym, scale )
					if ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ) and ( getattr( events, listCuts[4][0] ) < listCuts[4][1] ) and ( getattr( events, listCuts[5][0] ) < listCuts[5][1] ): 
						allHistos[ 'jet1Tau21_n-1_'+sample ].Fill( events.jet1Tau21, scale )
						allHistos[ 'jet2Tau21_n-1_'+sample ].Fill( events.jet2Tau21, scale )
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and ( getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[4][0] ) < listCuts[4][1] ) and ( getattr( events, listCuts[5][0] ) < listCuts[5][1] ): 
						allHistos[ 'jet1Tau31_n-1_'+sample ].Fill( events.jet1Tau31, scale )
						allHistos[ 'jet2Tau31_n-1_'+sample ].Fill( events.jet2Tau31, scale )
				else:
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ): allHistos[ 'prunedMassAsym_n-1_'+sample ].Fill( events.prunedMassAsym, scale )
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ): allHistos[ 'deltaEtaDijet_n-1_'+sample ].Fill( events.deltaEtaDijet, scale )
					if ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ): 
						allHistos[ 'jet1Tau21_n-1_'+sample ].Fill( events.jet1Tau21, scale )
						allHistos[ 'jet2Tau21_n-1_'+sample ].Fill( events.jet2Tau21, scale )

				##########

				for Ind in listOfOptions:
					allHistos[ listCuts[Ind[0]][0]+'Vs'+listCuts[Ind[1]][0]+'_'+sample ].Fill( getattr( events, listCuts[Ind[0]][0] ), getattr( events, listCuts[Ind[1]][0] ), scale )
					tmpSigCutsList = [ x for i,x in enumerate(sigCutsList) if i not in Ind ]
					
				##### Bkg estimation/ABCD method
				if all(sigCutsList[:-2]): 
					allHistos[ listCuts[-2][0]+'Vs'+listCuts[-1][0]+'_'+sample+'_Bkg' ].Fill( getattr( events, listCuts[0][0] ), getattr( events, listCuts[1][0] ), scale )
					plotABCD( [ ( getattr( events, listCuts[-2][0] ) < listCuts[-2][1] ), ( getattr( events, listCuts[-1][0] ) < listCuts[-1][1] ) ], [ listCuts[-2][0], listCuts[-1][0] ], events, massAve, scale, sample )

						

		dummy = 1
		for q in cutFlowList: 
			allHistos[ 'cutFlow_'+sample ].SetBinContent( dummy, cutFlowList[q] )
			allHistos[ 'cutFlow_'+sample ].GetXaxis().SetBinLabel( dummy, q )
			dummy+=1

	for sample in dictSamples:
		nameABCD = listCuts[-2][0]+'Vs'+listCuts[-1][0]+'_'+sample
		allHistos[ 'massAve_'+nameABCD+'_BC' ].Multiply( allHistos[ 'massAve_'+nameABCD+'_B' ], allHistos[ 'massAve_'+nameABCD+'_C' ], 1, 1, '')
		allHistos[ 'massAve_'+nameABCD+'_ABCDProj' ].Divide( allHistos[ 'massAve_'+nameABCD+'_BC' ], allHistos[ 'massAve_'+nameABCD+'_D' ], 1, 1, '')
		'''
		### The two lines above are doing exactly the following:
		for ibin in range( 0, allHistos[ 'massAve_'+nameABCD+'_B' ].GetNbinsX() ):
			Bcont = allHistos[ 'massAve_'+nameABCD+'_B' ].GetBinContent( ibin )
			Berr = allHistos[ 'massAve_'+nameABCD+'_B' ].GetBinError( ibin )
			Ccont = allHistos[ 'massAve_'+nameABCD+'_C' ].GetBinContent( ibin )
			Cerr = allHistos[ 'massAve_'+nameABCD+'_C' ].GetBinError( ibin )
			Dcont = allHistos[ 'massAve_'+nameABCD+'_D' ].GetBinContent( ibin )
			Derr = allHistos[ 'massAve_'+nameABCD+'_D' ].GetBinError( ibin )

			try: Nbkg = ( Bcont * Ccont ) / Dcont
			except ZeroDivisionError: Nbkg = 0
			allHistos[ "massAve_"+nameABCD+'_ABCDProj' ].SetBinContent( ibin, Nbkg )
			#try: NbkgErr = Nbkg * TMath.Sqrt( TMath.Power( Berr / Bcont, 2 ) + TMath.Power( Cerr / Ccont, 2 ) + TMath.Power( Derr / Dcont, 2 ) )
			try: NbkgErr = Nbkg * TMath.Sqrt( TMath.Power( TMath.Sqrt(Bcont) / Bcont, 2 ) + TMath.Power( TMath.Sqrt(Ccont) / Ccont, 2 ) + TMath.Power( TMath.Sqrt(Dcont) / Dcont, 2 ) )
			except ZeroDivisionError: NbkgErr = 0
			allHistos[ "massAve_"+nameABCD+'_ABCDProj' ].SetBinError( ibin, NbkgErr )
		'''


	outputFile.Write()
	##### Closing
	print 'Writing output file: '+ outputFileName
	outputFile.Close()
Esempio n. 2
0
  hSub = TH1F('h_sub_'+i,'h_sub_'+i,jetVarBins[k],jetVarMin[k],jetVarMax[k]) 
  hSub.Sumw2()
  histJetVarSub.append(hSub)
  k += 1  

#---- read the tree & fill histosgrams -
N = events.GetEntriesFast()
print 'Reading the input file: '+inf.GetName()
print 'Number of events: '+str(N)
d = 0

for i in xrange(N):
  events.GetEntry(i)
  #---- progress of the reading --------
  fraction = 10.*i/(1.*N)
  if TMath.FloorNint(fraction) > d:
    print str(10*TMath.FloorNint(fraction))+'%' 
  d = TMath.FloorNint(fraction)

  cut_trigger      = True 
  cut_mass         = True
  cut_dEtajj       = events.dEtajj < 1.3
  cut_leptonVeto   = events.jetElf[0]<0.7 and events.jetElf[1]<0.7 and events.jetMuf[0]<0.7 and events.jetMuf[1]<0.7
  cut_eta          = fabs(events.jetEta[0])<2.5 and fabs(events.jetEta[1])<2.5
  cut_pt           = events.jetPt[1]>40
  cut_substructure = (
    events.jetMassPruned[0] > 60 and 
    events.jetMassPruned[0] < 100 and 
    events.jetMassPruned[1] > 60 and 
    events.jetMassPruned[1] < 100 and 
    events.jetTau2[0]/events.jetTau1[0] < 0.5 and 
Esempio n. 3
0
def myAnalyzer( dictSamples, listCuts, signalName, RANGE, UNC ):

	outputFileName = 'Rootfiles/RUNMiniBoostedAnalysis_'+grooming+'_'+signalName+UNC+'_'+RANGE+'_'+args.version+'p7.root' 
	outputFile = TFile( outputFileName, 'RECREATE' )

	###################################### output Tree
	#tree = TTree('RUNAFinTree'+grooming, 'RUNAFinTree'+grooming)
	#AvgMass = array( 'f', [ 0. ] )
	#tree.Branch( 'AvgMass', AvgMass, 'AvgMass/F' )
	#Scale = array( 'f', [ 0. ] )
	#tree.Branch( 'Scale', Scale, 'Scale/F' )


	################################################################################################## Histos
	massBins = 100
	massXmin = 0.
	massXmax = 500.
	listOfOptions = [ [ j,k] for j in range(len(listCuts)-1) for k in range(1, len(listCuts) ) if k > j ]

	for sam in dictSamples:
		allHistos[ "cutFlow_"+sam ] = TH1F( "cutflow_"+sam, "cutflow_"+sam, len(listCuts), 0., len(listCuts) )
		allHistos[ "cutFlow_Scaled_"+sam ] = TH1F( "cutflow_scaled_"+sam, "cutflow_scaled_"+sam, len(listCuts), 0., len(listCuts) )
		allHistos[ "cutFlow_Scaled_Weights_"+sam ] = TH1F( "cutflow_scaled_weights_"+sam, "cutflow_scaled_weights_"+sam, len(listCuts), 0., len(listCuts) )
		allHistos[ "HT_"+sam ] = TH1F( "HT_"+sam, "HT_"+sam, 5000, 0., 5000 )
		allHistos[ "HT_"+sam ].Sumw2()
		allHistos[ "MET_"+sam ] = TH1F( "MET_"+sam, "MET_"+sam, 500, 0., 500 )
		allHistos[ "MET_"+sam ].Sumw2()
		allHistos[ "massAve_"+sam ] = TH1F( "massAve_"+sam, "massAve_"+sam, 500, 0., 500 )
		allHistos[ "massAve_"+sam ].Sumw2()
		allHistos[ "numJets_"+sam ] = TH1F( "numJets_"+sam, "numJets_"+sam, 20, 0., 20 )
		allHistos[ "numJets_"+sam ].Sumw2()
		allHistos[ "jet1Pt_"+sam ] = TH1F( "jet1Pt_"+sam, "jet1Pt_"+sam, 2000, 0., 2000 )
		allHistos[ "jet1Pt_"+sam ].Sumw2()
		allHistos[ "jet2Pt_"+sam ] = TH1F( "jet2Pt_"+sam, "jet2Pt_"+sam, 2000, 0., 2000 )
		allHistos[ "jet2Pt_"+sam ].Sumw2()
		allHistos[ "jet1CosThetaStar_"+sam ] = TH1F( "jet1CosThetaStar_"+sam, "jet1CosThetaStar_"+sam, 20, 0., 1 )
		allHistos[ "jet1CosThetaStar_"+sam ].Sumw2()
		allHistos[ "jet2CosThetaStar_"+sam ] = TH1F( "jet2CosThetaStar_"+sam, "jet2CosThetaStar_"+sam, 20, 0., 1 )
		allHistos[ "jet2CosThetaStar_"+sam ].Sumw2()
		allHistos[ "jet1Tau32_"+sam ] = TH1F( "jet1Tau32_"+sam, "jet1Tau32_"+sam, 20, 0., 1 )
		allHistos[ "jet1Tau32_"+sam ].Sumw2()
		allHistos[ "jet2Tau32_"+sam ] = TH1F( "jet2Tau32_"+sam, "jet2Tau32_"+sam, 20, 0., 1 )
		allHistos[ "jet2Tau32_"+sam ].Sumw2()
		allHistos[ "jet1RhoDDT_"+sam ] = TH1F( "jet1RhoDDT_"+sam, "jet1RhoDDT_"+sam, 200, -10, 10 )
		allHistos[ "jet1RhoDDT_"+sam ].Sumw2()
		allHistos[ "jet2RhoDDT_"+sam ] = TH1F( "jet2RhoDDT_"+sam, "jet2RhoDDT_"+sam, 200, -10, 10 )
		allHistos[ "jet2RhoDDT_"+sam ].Sumw2()
		allHistos[ "jet1Tau21VsRhoDDT_"+sam ] = TH2F( "jet1Tau21VsRhoDDT_"+sam, "jet1Tau21VsRhoDDT_"+sam, 20, 0., 1., 200, -10, 10 )
		allHistos[ "jet1Tau21VsRhoDDT_"+sam ].Sumw2()
		allHistos[ "jet2Tau21VsRhoDDT_"+sam ] = TH2F( "jet2Tau21VsRhoDDT_"+sam, "jet2Tau21VsRhoDDT_"+sam, 20, 0., 1., 200, -10, 10 )
		allHistos[ "jet2Tau21VsRhoDDT_"+sam ].Sumw2()
		allHistos[ "jet1Tau21DDT_"+sam ] = TH1F( "jet1Tau21DDT_"+sam, "jet1Tau21DDT_"+sam, 30, -1, 2 )
		allHistos[ "jet1Tau21DDT_"+sam ].Sumw2()
		allHistos[ "jet2Tau21DDT_"+sam ] = TH1F( "jet2Tau21DDT_"+sam, "jet2Tau21DDT_"+sam, 30, -1, 2 )
		allHistos[ "jet2Tau21DDT_"+sam ].Sumw2()
		allHistos[ "jet1Tau21DDTVsRhoDDT_"+sam ] = TH2F( "jet1Tau21DDTVsRhoDDT_"+sam, "jet1Tau21DDTVsRhoDDT_"+sam, 20, 0., 1., 200, -10, 10 )
		allHistos[ "jet1Tau21DDTVsRhoDDT_"+sam ].Sumw2()
		allHistos[ "jet2Tau21DDTVsRhoDDT_"+sam ] = TH2F( "jet2Tau21DDTVsRhoDDT_"+sam, "jet2Tau21DDTVsRhoDDT_"+sam, 20, 0., 1., 200, -10, 10 )
		allHistos[ "jet2Tau21DDTVsRhoDDT_"+sam ].Sumw2()
		#if 'high' in args.RANGE:
		allHistos[ "jet1Tau31_"+sam ] = TH1F( "jet1Tau31_"+sam, "jet1Tau31_"+sam, 20, 0., 1 )
		allHistos[ "jet1Tau31_"+sam ].Sumw2()
		allHistos[ "jet2Tau31_"+sam ] = TH1F( "jet2Tau31_"+sam, "jet2Tau31_"+sam, 20, 0., 1 )
		allHistos[ "jet2Tau31_"+sam ].Sumw2()
		allHistos[ "jet1SubjetPtRatio_"+sam ] = TH1F( "jet1SubjetPtRatio_"+sam, "jet1SubjetPtRatio_"+sam, 20, 0., 1 )
		allHistos[ "jet1SubjetPtRatio_"+sam ].Sumw2()
		allHistos[ "jet2SubjetPtRatio_"+sam ] = TH1F( "jet2SubjetPtRatio_"+sam, "jet2SubjetPtRatio_"+sam, 20, 0., 1 )
		allHistos[ "jet2SubjetPtRatio_"+sam ].Sumw2()
		allHistos[ "jet1BtagCSV_"+sam ] = TH1F( "jet1BtagCSV_"+sam, "jet1BtagCSV_"+sam, 5, 0., 5 )
		allHistos[ "jet1BtagCSV_"+sam ].Sumw2()
		allHistos[ "jet2BtagCSV_"+sam ] = TH1F( "jet2BtagCSV_"+sam, "jet2BtagCSV_"+sam, 5, 0., 5 )
		allHistos[ "jet2BtagCSV_"+sam ].Sumw2()
		allHistos[ "jetsBtagCSV_"+sam ] = TH1F( "jetsBtagCSV_"+sam, "jetsBtagCSV_"+sam, 5, 0., 5 )
		allHistos[ "jetsBtagCSV_"+sam ].Sumw2()

		allHistos[ "deltaEtaDijet_n-1_"+sam ] = TH1F( "deltaEtaDijet_n-1_"+sam, "deltaEtaDijet_n-1_"+sam, 50, 0., 5 )
		allHistos[ "deltaEtaDijet_n-1_"+sam ].Sumw2()
		allHistos[ "prunedMassAsym_n-1_"+sam ] = TH1F( "prunedMassAsym_n-1_"+sam, "prunedMassAsym_n-1_"+sam, 20, 0., 1 )
		allHistos[ "prunedMassAsym_n-1_"+sam ].Sumw2()
		allHistos[ "jet1Tau21_n-1_"+sam ] = TH1F( "jet1Tau21_n-1_"+sam, "jet1Tau21_n-1_"+sam, 20, 0., 1 )
		allHistos[ "jet1Tau21_n-1_"+sam ].Sumw2()
		allHistos[ "jet2Tau21_n-1_"+sam ] = TH1F( "jet2Tau21_n-1_"+sam, "jet2Tau21_n-1_"+sam, 20, 0., 1 )
		allHistos[ "jet2Tau21_n-1_"+sam ].Sumw2()
		'''
		if 'low' in args.RANGE:
			allHistos[ "jet1Tau31_n-1_"+sam ] = TH1F( "jet1Tau31_n-1_"+sam, "jet1Tau31_n-1_"+sam, 20, 0., 1 )
			allHistos[ "jet1Tau31_n-1_"+sam ].Sumw2()
			allHistos[ "jet2Tau31_n-1_"+sam ] = TH1F( "jet2Tau31_n-1_"+sam, "jet2Tau31_n-1_"+sam, 20, 0., 1 )
			allHistos[ "jet2Tau31_n-1_"+sam ].Sumw2()
		'''
		listCuts.append( [ 'btag' ] )
		for var in listCuts:
			if 'deltaEta' in var[0]: 
				allHistos[ var[0]+'_'+sam ] = TH1F( var[0]+'_'+sam, var[0]+'_'+sam, 50, 0., 5. )
				for var1 in listCuts: allHistos[ var[0]+'_'+var1[0]+"_"+sam ] = TH1F( var[0]+'_'+var1[0]+"_"+sam, var[0]+'_'+var1[0]+"_"+sam, 50, 0., 5. )
			else: 
				allHistos[ var[0]+'_'+sam ] = TH1F( var[0]+'_'+sam, var[0]+'_'+sam, 20, 0., 1. )
				for var1 in listCuts: allHistos[ var[0]+'_'+var1[0]+"_"+sam ] = TH1F( var[0]+'_'+var1[0]+"_"+sam, var[0]+'_'+var1[0]+"_"+sam, 20, 0., 1. )
			allHistos[ var[0]+'_'+sam ].Sumw2()
			allHistos[ "massAve_"+var[0]+'_'+sam ] = TH1F( "massAve_"+var[0]+'_'+sam, "massAve_"+var[0]+'_'+sam, massBins, massXmin, massXmax )
			allHistos[ "massAve_"+var[0]+'_'+sam ].Sumw2()

			allHistos[ "HT_"+var[0]+"_"+sam ] = TH1F( "HT_"+var[0]+"_"+sam, "HT_"+var[0]+"_"+sam, 5000, 0., 5000 )
			allHistos[ "HT_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "MET_"+var[0]+"_"+sam ] = TH1F( "MET_"+var[0]+"_"+sam, "MET_"+var[0]+"_"+sam, 500, 0., 500 )
			allHistos[ "MET_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "numJets_"+var[0]+"_"+sam ] = TH1F( "numJets_"+var[0]+"_"+sam, "numJets_"+var[0]+"_"+sam, 20, 0., 20 )
			allHistos[ "numJets_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "jet1Pt_"+var[0]+"_"+sam ] = TH1F( "jet1Pt_"+var[0]+"_"+sam, "jet1Pt_"+var[0]+"_"+sam, 2000, 0., 2000 )
			allHistos[ "jet1Pt_"+var[0]+"_"+sam ].Sumw2()
			allHistos[ "jet2Pt_"+var[0]+"_"+sam ] = TH1F( "jet2Pt_"+var[0]+"_"+sam, "jet2Pt_"+var[0]+"_"+sam, 2000, 0., 2000 )
			allHistos[ "jet2Pt_"+var[0]+"_"+sam ].Sumw2()
		listCuts.remove( ['btag'] )

		for ind in listOfOptions:
			tmpName = listCuts[ind[0]][0]+'Vs'+listCuts[ind[1]][0]+'_'+sam
			allHistos[ tmpName ] = TH2F( tmpName, tmpName, 
					(50 if 'deltaEta' in listCuts[ind[0]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[0]][0] else 1. ),
					(50 if 'deltaEta' in listCuts[ind[1]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[1]][0] else 1. ) 
					)
			allHistos[ tmpName ].Sumw2()

			#tmpNameSam = listCuts[-2][0]+'Vs'+listCuts[-1][0]+'_'+sam
			tmpNameSam = tmpName #listCuts[-2][0]+'Vs'+listCuts[-1][0]+'_'+sam
			#if 'RPV' in sam: massBins = 50
			#allHistos[ "massAve_"+tmpNameSam+'_ABCDProj' ] = TH1F( "massAve_"+tmpNameSam+'_ABCDProj', "massAve_"+tmpNameSam+'_ABCDProj', len(boostedMassAveBins)-1, boostedMassAveBins)
			#allHistos[ "massAve_"+tmpNameSam+'_BC' ] = TH1F( "massAve_"+tmpNameSam+'_BC', "massAve_"+tmpNameSam+'_BC',  len(boostedMassAveBins)-1, boostedMassAveBins )
			#else:
			allHistos[ "massAve_"+tmpNameSam+'_ABCDProj' ] = TH1F( "massAve_"+tmpNameSam+'_ABCDProj', "massAve_"+tmpNameSam+'_ABCDProj', massBins, massXmin, massXmax )
			allHistos[ "massAve_"+tmpNameSam+'_BC' ] = TH1F( "massAve_"+tmpNameSam+'_BC', "massAve_"+tmpNameSam+'_BC', massBins, massXmin, massXmax )
			allHistos[ "massAve_"+tmpNameSam+'_ABCDProj' ].Sumw2()
			allHistos[ "massAve_"+tmpNameSam+'_BC' ].Sumw2()

			allHistos[ tmpNameSam+'_Bkg' ] = TH2F( tmpNameSam+'_Bkg', tmpNameSam+'_Bkg', 
					#(50 if 'deltaEta' in listCuts[-2][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-2][0] else 1. ),
					#(50 if 'deltaEta' in listCuts[-1][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-1][0] else 1. ) 
					(50 if 'deltaEta' in listCuts[ind[0]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[0]][0] else 1. ),
					(50 if 'deltaEta' in listCuts[ind[1]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[1]][0] else 1. ) 
					)
			allHistos[ tmpNameSam+'_Bkg' ].Sumw2()

			for k in [ 'A', 'B', 'C', 'D' ]:
				#allHistos[ "massAve_"+tmpNameSam+'_'+k ] = TH1F( "massAve_"+tmpNameSam+'_'+k, "massAve_"+tmpNameSam+'_'+k,  len(boostedMassAveBins)-1, boostedMassAveBins )
				allHistos[ "massAve_"+tmpNameSam+'_'+k ] = TH1F( "massAve_"+tmpNameSam+'_'+k, "massAve_"+tmpNameSam+'_'+k, massBins, massXmin, massXmax )
				allHistos[ "massAve_"+tmpNameSam+'_'+k ].Sumw2()
				allHistos[ tmpNameSam+'_'+k ] = TH2F( tmpNameSam+'_'+k, tmpNameSam+'_'+k, 
						#(50 if 'deltaEta' in listCuts[-2][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-2][0] else 1. ),
						#(50 if 'deltaEta' in listCuts[-1][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-1][0] else 1. ) 
						(50 if 'deltaEta' in listCuts[ind[0]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[0]][0] else 1. ),
						(50 if 'deltaEta' in listCuts[ind[1]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[1]][0] else 1. ) 
						)
				allHistos[ tmpNameSam+'_'+k ].Sumw2()

				allHistos[ "massAve_"+tmpNameSam+'_btag_'+k ] = TH1F( "massAve_"+tmpNameSam+'_btag_'+k, "massAve_"+tmpNameSam+'_btag_'+k, massBins, massXmin, massXmax )
				allHistos[ "massAve_"+tmpNameSam+'_btag_'+k ].Sumw2()
				allHistos[ tmpNameSam+'_btag_'+k ] = TH2F( tmpNameSam+'_btag_'+k, tmpNameSam+'_btag_'+k, 
						#(50 if 'deltaEta' in listCuts[-2][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-2][0] else 1. ),
						#(50 if 'deltaEta' in listCuts[-1][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[-1][0] else 1. ) 
						(50 if 'deltaEta' in listCuts[ind[0]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[0]][0] else 1. ),
						(50 if 'deltaEta' in listCuts[ind[1]][0] else 20 ), 0., (5. if 'deltaEta' in listCuts[ind[1]][0] else 1. ) 
						)
				allHistos[ tmpNameSam+'_btag_'+k ].Sumw2()
	#print allHistos

	################################################################################################## Running the Analysis
	for sample in dictSamples:

		####### Get GenTree 
		inputFile, events, numEntries = getTree( dictSamples[ sample ], ('BoostedAnalysisPlotsPuppi'+( '' if 'PDF' in UNC else UNC)+'/RUNATree' if 'Puppi' in args.grooming else 'BoostedAnalysisPlots'+( '' if 'PDF' in UNC else UNC)+'/RUNATree' ) )
		print '-'*40
		print '------> ', sample
		print '------> Number of events: '+str(numEntries)
		d = 0
		cutFlowList = OrderedDict()
		cutFlowScaledList = OrderedDict()
		cutFlowScaledListWeights = OrderedDict()
		cutFlowList[ 'Process' ] = 0
		cutFlowList[ 'Preselection' ] = 0
		cutFlowScaledList[ 'Process' ] = 0
		cutFlowScaledList[ 'Preselection' ] = 0
		cutFlowScaledListWeights[ 'Process' ] = 0
		cutFlowScaledListWeights[ 'Preselection' ] = 0
		for k in listCuts: 
			cutFlowList[ k[0] ] = 0
			cutFlowScaledList[ k[0] ] = 0
			cutFlowScaledListWeights[ k[0] ] = 0
		cutFlowList[ 'btag' ] = 0
		cutFlowScaledList[ 'btag' ] = 0
		cutFlowScaledListWeights[ 'btag' ] = 0

		for i in xrange(numEntries):
			events.GetEntry(i)

			#---- progress of the reading --------
			fraction = 10.*i/(1.*numEntries)
			if TMath.FloorNint(fraction) > d: print str(10*TMath.FloorNint(fraction))+'%' 
			d = TMath.FloorNint(fraction)
			#if ( i > 100000 ): break

			Run      = events.run
			Lumi     = events.lumi
			NumEvent = events.event
			puWeight	= events.puWeight
			if 'v06' in args.version: pdfWeight	= events.pdfWeight
			lumiWeight	= events.lumiWeight
			HT		= events.HT
			MET		= events.MET
			numJets		= events.numJets
			massAve		= getattr( events, (args.grooming+"MassAve").replace('Puppi','') )
			jet1Mass	= getattr( events, 'jet1'+(args.grooming+"Mass").replace('pruned','Pruned').replace('soft','Soft').replace('Puppi',''))
			jet2Mass	= getattr( events, 'jet2'+(args.grooming+"Mass").replace('pruned','Pruned').replace('soft','Soft').replace('Puppi',''))
			jet1Pt          = events.jet1Pt
			jet2Pt          = events.jet2Pt
			jet1Eta          = events.jet1Eta
			jet2Eta          = events.jet2Eta
			jet1CosThetaStar	= events.jet1CosThetaStar
			jet2CosThetaStar	= events.jet2CosThetaStar
			jet1BtagCSV		= ( events.jet1btagCSVv2 > 0.800 )
			jet2BtagCSV		= ( events.jet2btagCSVv2 > 0.800 )
			
			#print 'Entry ', Run, ':', Lumi, ':', NumEvent

			if 'DATA' in sample: scale = 1
			#elif 'RPV' in sample: scale = 2606 * puWeight * SF
			else: scale = 2666 * puWeight * lumiWeight

			if 'PDF' in UNC:
				if 'Up' in UNC: scale = scale*(1+pdfWeight)
				else: scale = scale*(1-pdfWeight)

			cutFlowList[ 'Process' ] += 1
			cutFlowScaledList[ 'Process' ] += scale
			cutFlowScaledList[ 'Process' ] += (puWeight*puWeight)

			########## DDT
			jet1RhoDDT = TMath.Log( jet1Mass*jet1Mass/jet1Pt )
			jet2RhoDDT = TMath.Log( jet2Mass*jet2Mass/jet2Pt )
			jet1Tau21DDT = events.jet1Tau21 + 0.063 * jet1RhoDDT 
			jet2Tau21DDT = events.jet2Tau21 + 0.063 * jet2RhoDDT 
			
			#### Pre-selection
			HTCut = ( HT > 900 )
			dijetCut =  ( numJets > 1 )
			#jetPtCut =  ( jet1Pt > 500 ) and ( jet2Pt > 450 )
			jetPtCut =  ( jet1Pt > 150 ) and ( jet2Pt > 150 )
			
			#if HTCut and dijetCut and jetPtCut:
			if HTCut and dijetCut :
				cutFlowList[ 'Preselection' ] += 1
				cutFlowScaledList[ 'Preselection' ] += scale
				cutFlowScaledList[ 'Preselection' ] += (puWeight*puWeight)
				sigCutsList = []
				allHistos[ "HT_"+sam ].Fill( HT, scale )
				allHistos[ "MET_"+sam ].Fill( MET, scale )
				allHistos[ "massAve_"+sam ].Fill( massAve, scale )
				allHistos[ "numJets_"+sam ].Fill( numJets, scale )
				allHistos[ "jet1Pt_"+sam ].Fill( jet1Pt, scale )
				allHistos[ "jet2Pt_"+sam ].Fill( jet2Pt, scale )
				allHistos[ "jet1RhoDDT_"+sam ].Fill( jet1RhoDDT, scale )
				allHistos[ "jet2RhoDDT_"+sam ].Fill( jet2RhoDDT, scale )
				allHistos[ "jet1Tau21VsRhoDDT_"+sam ].Fill( events.jet1Tau21, jet1RhoDDT, scale )
				allHistos[ "jet2Tau21VsRhoDDT_"+sam ].Fill( events.jet2Tau21, jet2RhoDDT, scale )
				allHistos[ "jet1Tau21DDT_"+sam ].Fill( jet1Tau21DDT, scale )
				allHistos[ "jet2Tau21DDT_"+sam ].Fill( jet2Tau21DDT, scale )
				allHistos[ "jet1Tau21DDTVsRhoDDT_"+sam ].Fill( jet1Tau21DDT, jet1RhoDDT, scale )
				allHistos[ "jet2Tau21DDTVsRhoDDT_"+sam ].Fill( jet2Tau21DDT, jet2RhoDDT, scale )
				allHistos[ "prunedMassAsym_"+sam ].Fill( events.prunedMassAsym, scale )
				allHistos[ "deltaEtaDijet_"+sam ].Fill( events.deltaEtaDijet, scale )
				allHistos[ "jet1CosThetaStar_"+sam ].Fill( jet1CosThetaStar, scale )
				allHistos[ "jet2CosThetaStar_"+sam ].Fill( jet2CosThetaStar, scale )
				allHistos[ "jet1Tau21_"+sam ].Fill( events.jet1Tau21, scale )
				allHistos[ "jet2Tau21_"+sam ].Fill( events.jet2Tau21, scale )
				allHistos[ "jet1Tau31_"+sam ].Fill( events.jet1Tau31, scale )
				allHistos[ "jet2Tau31_"+sam ].Fill( events.jet2Tau31, scale )
				allHistos[ "jet1Tau32_"+sam ].Fill( events.jet1Tau32, scale )
				allHistos[ "jet2Tau32_"+sam ].Fill( events.jet2Tau32, scale )
				allHistos[ "jet1SubjetPtRatio_"+sam ].Fill( events.jet1SubjetPtRatio, scale )
				allHistos[ "jet2SubjetPtRatio_"+sam ].Fill( events.jet2SubjetPtRatio, scale )
				allHistos[ "jet1BtagCSV_"+sam ].Fill( 1 if jet1BtagCSV else 0 )
				allHistos[ "jet2BtagCSV_"+sam ].Fill( 1 if jet2BtagCSV else 0 )

				bothBtag = ( jet1BtagCSV and jet2BtagCSV )
				oneBtag = ( jet1BtagCSV or jet2BtagCSV )
				if bothBtag: allHistos[ "jetsBtagCSV_"+sam ].Fill( 2 )
				elif oneBtag: allHistos[ "jetsBtagCSV_"+sam ].Fill( 1 )
				else: allHistos[ "jetsBtagCSV_"+sam ].Fill( 0 )

				for var in listCuts:
					#allHistos[ var[0]+'_'+sample ].Fill( getattr( events, var[0] ), scale )
					nextCut = False
					if ( getattr( events, var[0] ) < var[1] ): nextCut = True 
					else: nextCut = False
					sigCutsList.append( nextCut )

					if all(sigCutsList): 
						allHistos[ 'massAve_'+var[0]+'_'+sample ].Fill( massAve, scale )  ### adding two prong scale factor
						allHistos[ 'jet1Tau21_'+var[0]+'_'+sample ].Fill( events.jet1Tau21, scale )
						allHistos[ 'jet2Tau21_'+var[0]+'_'+sample ].Fill( events.jet2Tau21, scale )
						#if 'low' in args.RANGE: allHistos[ 'jet1Tau31_'+var[0]+'_'+sample ].Fill( events.jet1Tau31, scale )
						#if 'low' in args.RANGE: allHistos[ 'jet2Tau31_'+var[0]+'_'+sample ].Fill( events.jet2Tau31, scale )
						allHistos[ 'prunedMassAsym_'+var[0]+'_'+sample ].Fill( events.prunedMassAsym, scale )
						allHistos[ 'deltaEtaDijet_'+var[0]+'_'+sample ].Fill( events.deltaEtaDijet, scale )
						allHistos[ "HT_"+var[0]+"_"+sam ].Fill( HT, scale )
						allHistos[ "MET_"+var[0]+"_"+sam ].Fill( MET, scale )
						allHistos[ "numJets_"+var[0]+"_"+sam ].Fill( numJets, scale )
						allHistos[ "jet1Pt_"+var[0]+"_"+sam ].Fill( jet1Pt, scale )
						allHistos[ "jet2Pt_"+var[0]+"_"+sam ].Fill( jet2Pt, scale )
						cutFlowList[ var[0] ] += 1
						cutFlowScaledList[ var[0] ] += scale
						cutFlowScaledList[ var[0] ] += (puWeight*puWeight)

				#if oneBtag and all(sigCutsList): 
				if bothBtag and all(sigCutsList): 
					allHistos[ 'massAve_btag_'+sample ].Fill( massAve, scale )  ### adding two prong scale factor
					allHistos[ 'jet1Tau21_btag_'+sample ].Fill( events.jet1Tau21, scale )
					allHistos[ 'jet2Tau21_btag_'+sample ].Fill( events.jet2Tau21, scale )
					#if 'low' in args.RANGE: allHistos[ 'jet1Tau31_btag_'+sample ].Fill( events.jet1Tau31, scale )
					#if 'low' in args.RANGE: allHistos[ 'jet2Tau31_btag_'+sample ].Fill( events.jet2Tau31, scale )
					allHistos[ 'prunedMassAsym_btag_'+sample ].Fill( events.prunedMassAsym, scale )
					allHistos[ 'deltaEtaDijet_btag_'+sample ].Fill( events.deltaEtaDijet, scale )
					allHistos[ "HT_btag_"+sam ].Fill( HT, scale )
					allHistos[ "MET_btag_"+sam ].Fill( MET, scale )
					allHistos[ "numJets_btag_"+sam ].Fill( numJets, scale )
					allHistos[ "jet1Pt_btag_"+sam ].Fill( jet1Pt, scale )
					allHistos[ "jet2Pt_btag_"+sam ].Fill( jet2Pt, scale )
					cutFlowList[ 'btag' ] += 1
					cutFlowScaledList[ 'btag' ] += scale
					cutFlowScaledList[ 'btag' ] += (puWeight*puWeight)
				#### n-1 plots
				'''
				if ( 'low' in args.RANGE ):
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ) and ( getattr( events, listCuts[4][0] ) < listCuts[4][1] ): allHistos[ 'deltaEtaDijet_n-1_'+sample ].Fill( events.deltaEtaDijet, scale )
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ) and ( getattr( events, listCuts[5][0] ) < listCuts[5][1] ): allHistos[ 'prunedMassAsym_n-1_'+sample ].Fill( events.prunedMassAsym, scale )
					if ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ) and ( getattr( events, listCuts[4][0] ) < listCuts[4][1] ) and ( getattr( events, listCuts[5][0] ) < listCuts[5][1] ): 
						allHistos[ 'jet1Tau21_n-1_'+sample ].Fill( events.jet1Tau21, scale )
						allHistos[ 'jet2Tau21_n-1_'+sample ].Fill( events.jet2Tau21, scale )
					if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and ( getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[4][0] ) < listCuts[4][1] ) and ( getattr( events, listCuts[5][0] ) < listCuts[5][1] ): 
						allHistos[ 'jet1Tau31_n-1_'+sample ].Fill( events.jet1Tau31, scale )
						allHistos[ 'jet2Tau31_n-1_'+sample ].Fill( events.jet2Tau31, scale )
				else:
				'''
				if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ): allHistos[ 'prunedMassAsym_n-1_'+sample ].Fill( events.prunedMassAsym, scale )
				if ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ) and (  getattr( events, listCuts[1][0] ) < listCuts[1][1] ) and ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ): allHistos[ 'deltaEtaDijet_n-1_'+sample ].Fill( events.deltaEtaDijet, scale )
				if ( getattr( events, listCuts[2][0] ) < listCuts[2][1] ) and ( getattr( events, listCuts[3][0] ) < listCuts[3][1] ): 
					allHistos[ 'jet1Tau21_n-1_'+sample ].Fill( events.jet1Tau21, scale )
					allHistos[ 'jet2Tau21_n-1_'+sample ].Fill( events.jet2Tau21, scale )

				##########

				for Ind in listOfOptions:
					allHistos[ listCuts[Ind[0]][0]+'Vs'+listCuts[Ind[1]][0]+'_'+sample ].Fill( getattr( events, listCuts[Ind[0]][0] ), getattr( events, listCuts[Ind[1]][0] ), scale )
					tmpSigCutsList = [ x for i,x in enumerate(sigCutsList) if i not in Ind ]
					
				##### Bkg estimation/ABCD method
				if ( all(sigCutsList[:-2]) ): # and ( getattr( events, listCuts[5][0] ) > (listCuts[5][1]*2) )): 
					allHistos[ listCuts[-2][0]+'Vs'+listCuts[-1][0]+'_'+sample+'_Bkg' ].Fill( getattr( events, listCuts[0][0] ), getattr( events, listCuts[1][0] ), scale )
					plotABCD( [ ( getattr( events, listCuts[-2][0] ) < listCuts[-2][1] ), ( getattr( events, listCuts[-1][0] ) < listCuts[-1][1] ) ], [ listCuts[-2][0], listCuts[-1][0] ], events, massAve, scale, sample )

					if bothBtag: plotABCD( [ ( getattr( events, listCuts[-2][0] ) < listCuts[-2][1] ), ( getattr( events, listCuts[-1][0] ) < listCuts[-1][1] ) ], [ listCuts[-2][0], listCuts[-1][0] ], events, massAve, scale, sample+'_btag' )

				####### bkg estimation alternatives
				if sigCutsList[2]: 
					allHistos[ 'jet1Tau21VsdeltaEtaDijet_'+sample+'_Bkg' ].Fill( getattr( events, 'jet1Tau21' ), getattr( events, 'deltaEtaDijet' ), scale )
					allHistos[ 'jet2Tau21VsdeltaEtaDijet_'+sample+'_Bkg' ].Fill( getattr( events, 'jet2Tau21' ), getattr( events, 'deltaEtaDijet' ), scale )
					plotABCDv2( [ ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ), ( getattr( events, listCuts[1][0] ) < listCuts[1][1] ), ( getattr( events, listCuts[-1][0] ) < listCuts[-1][1] ) ], [ listCuts[0][0], listCuts[-1][0] ], events, massAve, scale, sample )
					plotABCDv2( [ ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ), ( getattr( events, listCuts[1][0] ) < listCuts[1][1] ), ( getattr( events, listCuts[-1][0] ) < listCuts[-1][1] ) ], [ listCuts[1][0], listCuts[-1][0] ], events, massAve, scale, sample )

				'''
				if sigCutsList[-1]: 
					allHistos[ 'jet1Tau21VsprunedMassAsym_'+sample+'_Bkg' ].Fill( getattr( events, 'jet1Tau21' ), getattr( events, 'prunedMassAsym' ), scale )
					allHistos[ 'jet2Tau21VsprunedMassAsym_'+sample+'_Bkg' ].Fill( getattr( events, 'jet2Tau21' ), getattr( events, 'prunedMassAsym' ), scale )
					plotABCDv2( [ ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ), ( getattr( events, listCuts[1][0] ) < listCuts[1][1] ), ( getattr( events, listCuts[-2][0] ) < listCuts[-2][1] ) ], [ listCuts[0][0], listCuts[-2][0] ], events, massAve, scale, sample )
					plotABCDv2( [ ( getattr( events, listCuts[0][0] ) < listCuts[0][1] ), ( getattr( events, listCuts[1][0] ) < listCuts[1][1] ), ( getattr( events, listCuts[-2][0] ) < listCuts[-2][1] ) ], [ listCuts[1][0], listCuts[-2][0] ], events, massAve, scale, sample )
				'''

						

		dummy = 1
		for q in cutFlowList: 
			allHistos[ 'cutFlow_'+sample ].SetBinContent( dummy, cutFlowList[q] )
			allHistos[ 'cutFlow_'+sample ].GetXaxis().SetBinLabel( dummy, q )
			allHistos[ 'cutFlow_Scaled_'+sample ].SetBinContent( dummy, cutFlowScaledList[q] )
			allHistos[ 'cutFlow_Scaled_'+sample ].GetXaxis().SetBinLabel( dummy, q )
			allHistos[ 'cutFlow_Scaled_Weights_'+sample ].SetBinContent( dummy, cutFlowScaledListWeights[q] )
			allHistos[ 'cutFlow_Scaled_Weights_'+sample ].GetXaxis().SetBinLabel( dummy, q )
			dummy+=1

	for sample in dictSamples:
		nameABCD = listCuts[-2][0]+'Vs'+listCuts[-1][0]+'_'+sample
		allHistos[ 'massAve_'+nameABCD+'_BC' ].Multiply( allHistos[ 'massAve_'+nameABCD+'_B' ], allHistos[ 'massAve_'+nameABCD+'_C' ], 1, 1, '')
		allHistos[ 'massAve_'+nameABCD+'_ABCDProj' ].Divide( allHistos[ 'massAve_'+nameABCD+'_BC' ], allHistos[ 'massAve_'+nameABCD+'_D' ], 1, 1, '')
		'''
		### The two lines above are doing exactly the following:
		for ibin in range( 0, allHistos[ 'massAve_'+nameABCD+'_B' ].GetNbinsX() ):
			Bcont = allHistos[ 'massAve_'+nameABCD+'_B' ].GetBinContent( ibin )
			Berr = allHistos[ 'massAve_'+nameABCD+'_B' ].GetBinError( ibin )
			Ccont = allHistos[ 'massAve_'+nameABCD+'_C' ].GetBinContent( ibin )
			Cerr = allHistos[ 'massAve_'+nameABCD+'_C' ].GetBinError( ibin )
			Dcont = allHistos[ 'massAve_'+nameABCD+'_D' ].GetBinContent( ibin )
			Derr = allHistos[ 'massAve_'+nameABCD+'_D' ].GetBinError( ibin )

			try: Nbkg = ( Bcont * Ccont ) / Dcont
			except ZeroDivisionError: Nbkg = 0
			allHistos[ "massAve_"+nameABCD+'_ABCDProj' ].SetBinContent( ibin, Nbkg )
			#try: NbkgErr = Nbkg * TMath.Sqrt( TMath.Power( Berr / Bcont, 2 ) + TMath.Power( Cerr / Ccont, 2 ) + TMath.Power( Derr / Dcont, 2 ) )
			try: NbkgErr = Nbkg * TMath.Sqrt( TMath.Power( TMath.Sqrt(Bcont) / Bcont, 2 ) + TMath.Power( TMath.Sqrt(Ccont) / Ccont, 2 ) + TMath.Power( TMath.Sqrt(Dcont) / Dcont, 2 ) )
			except ZeroDivisionError: NbkgErr = 0
			allHistos[ "massAve_"+nameABCD+'_ABCDProj' ].SetBinError( ibin, NbkgErr )
		'''


	outputFile.Write()
	##### Closing
	print 'Writing output file: '+ outputFileName
	outputFile.Close()
Esempio n. 4
0
def myAnalyzer(sample, couts):

    inputFile = TFile(sample, 'read')
    outputFileName = sample.replace('RUNAnalysis', 'RUNMiniResolvedAnalysis')
    outputFile = TFile(outputFileName, 'RECREATE')
    #outputFile = TFile( 'test.root', 'RECREATE' )

    ###################################### output Tree
    tree = TTree('RUNAMiniTree', 'RUNAMiniTree')
    weight = array('f', [0.])
    dijet1Mass = array('f', [0.])
    dijet2Mass = array('f', [0.])
    dijet1sPt = array('f', [0.])
    dijet2sPt = array('f', [0.])
    massAve = array('f', [0.])
    j4Pt = array('f', [0.])
    ht = array('f', [0.])
    mindR = array('f', [0.])
    deltaEtaDijet1 = array('f', [0.])
    deltaEtaDijet2 = array('f', [0.])
    deltaEtaAveDijets = array('f', [0.])
    deltaEtaDijets = array('f', [0.])
    massAsymmetry = array('f', [0.])
    cosThetaStarDijet1 = array('f', [0.])
    cosThetaStarDijet2 = array('f', [0.])
    deltaDijet1 = array('f', [0.])
    deltaDijet2 = array('f', [0.])
    xi1 = array('f', [0.])
    xi2 = array('f', [0.])
    deltaRDijet1 = array('f', [0.])
    deltaRDijet2 = array('f', [0.])
    tree.Branch('weight', weight, 'weight/F')
    tree.Branch('massAve', massAve, 'massAve/F')
    tree.Branch('dijet1Mass', dijet1Mass, 'dijet1Mass/F')
    tree.Branch('dijet2Mass', dijet2Mass, 'dijet2Mass/F')
    tree.Branch('dijet1sPt', dijet1sPt, 'dijet1sPt/F')
    tree.Branch('dijet2sPt', dijet2sPt, 'dijet2sPt/F')
    tree.Branch('mindR', mindR, 'mindR/F')
    tree.Branch('ht', ht, 'ht/F')
    tree.Branch('j4Pt', j4Pt, 'j4Pt/F')
    tree.Branch('deltaEtaDijet1', deltaEtaDijet1, 'deltaEtaDijet1/F')
    tree.Branch('deltaEtaDijet2', deltaEtaDijet2, 'deltaEtaDijet2/F')
    tree.Branch('deltaEtaAveDijets', deltaEtaAveDijets, 'deltaEtaAveDijets/F')
    tree.Branch('deltaEtaDijets', deltaEtaDijets, 'deltaEtaDijets/F')
    tree.Branch('massAsymmetry', massAsymmetry, 'massAsymmetry/F')
    tree.Branch('cosThetaStarDijet1', cosThetaStarDijet1,
                'cosThetaStarDijet1/F')
    tree.Branch('cosThetaStarDijet2', cosThetaStarDijet2,
                'cosThetaStarDijet2/F')
    tree.Branch('deltaDijet1', deltaDijet1, 'deltaDijet1/F')
    tree.Branch('deltaDijet2', deltaDijet2, 'deltaDijet2/F')
    tree.Branch('xi1', xi1, 'xi1/F')
    tree.Branch('xi2', xi2, 'xi2/F')
    tree.Branch('deltaRDijet1', deltaRDijet1, 'deltaRDijet1/F')
    tree.Branch('deltaRDijet2', deltaRDijet2, 'deltaRDijet2/F')

    ################################################################################################## Trigger Histos
    nBinsMass = 200
    maxMass = 2000
    nBinsHT = 150
    maxHT = 1500

    hmindR = TH1F('mindR', 'mindR', 100, 0, 5.)
    hmassAve = TH1F('massAve', 'massAve', nBinsMass, 0, maxMass)
    hdeltaEtaDijet1 = TH1F('deltaEtaDijet1', 'deltaEtaDijet1', 100, 0, 5.)
    hdeltaEtaDijet2 = TH1F('deltaEtaDijet2', 'deltaEtaDijet2', 100, 0, 5.)
    hdeltaEtaAveDijets = TH1F('deltaEtaAveDijets', 'deltaEtaAveDijets', 100, 0,
                              5.)
    hdeltaEtaDijets = TH1F('deltaEtaDijets', 'deltaEtaDijets', 100, 0, 5.)
    hmassAsymmetry = TH1F('massAsymmetry', 'massAsymmetry', 20, 0, 1.)
    hcosThetaStarDijet1 = TH1F('cosThetaStarDijet1', 'cosThetaStarDijet1', 20,
                               0, 1.)
    hcosThetaStarDijet2 = TH1F('cosThetaStarDijet2', 'cosThetaStarDijet2', 20,
                               0, 1.)
    hdeltaDijet1 = TH1F('deltaDijet1', 'deltaDijet1', 1000, -1000, 1000.)
    hdeltaDijet2 = TH1F('deltaDijet2', 'deltaDijet2', 1000, -1000, 1000.)
    hxi1 = TH1F('xi1', 'xi1', 50, 0, 5.)
    hxi2 = TH1F('xi2', 'xi2', 50, 0, 5.)
    hdeltaRDijet1 = TH1F('deltaRDijet1', 'deltaRDijet1', 50, 0, 5.)
    hdeltaRDijet2 = TH1F('deltaRDijet2', 'deltaRDijet2', 50, 0, 5.)
    massAveVsDijet1sPt = TH2F('massAveVsDijet1sPt', 'massAveVsDijet1sPt',
                              nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsDijet2sPt = TH2F('massAveVsDijet2sPt', 'massAveVsDijet2sPt',
                              nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsdeltaDijet1 = TH2F('massAveVsdeltaDijet1', 'massAveVsdeltaDijet1',
                                nBinsMass, 0, maxMass, 1000, -1000, 1000)
    massAveVsdeltaDijet2 = TH2F('massAveVsdeltaDijet2', 'massAveVsdeltaDijet2',
                                nBinsMass, 0, maxMass, 1000, -1000, 1000)
    massAveVsmindR = TH2F('massAveVsmindR', 'massAveVsmindR', nBinsMass, 0,
                          maxMass, 100, 0, 5)
    massAveVsdeltaRDijet1 = TH2F('massAveVsdeltaRDijet1',
                                 'massAveVsdeltaRDijet1', nBinsMass, 0,
                                 maxMass, 50, 0, 5)
    massAveVsdeltaRDijet2 = TH2F('massAveVsdeltaRDijet2',
                                 'massAveVsdeltaRDijet2', nBinsMass, 0,
                                 maxMass, 50, 0, 5)

    mindR_cutMassAsym = TH1F('mindR_cutMassAsym', 'mindR_cutMassAsym', 100, 0,
                             5.)
    massAve_cutMassAsym = TH1F('massAve_cutMassAsym', 'massAve_cutMassAsym',
                               nBinsMass, 0, maxMass)
    deltaEtaDijet1_cutMassAsym = TH1F('deltaEtaDijet1_cutMassAsym',
                                      'deltaEtaDijet1_cutMassAsym', 100, 0, 5.)
    deltaEtaDijet2_cutMassAsym = TH1F('deltaEtaDijet2_cutMassAsym',
                                      'deltaEtaDijet2_cutMassAsym', 100, 0, 5.)
    deltaEtaAveDijets_cutMassAsym = TH1F('deltaEtaAveDijets_cutMassAsym',
                                         'deltaEtaAveDijets_cutMassAsym', 100,
                                         0, 5.)
    deltaEtaDijets_cutMassAsym = TH1F('deltaEtaDijets_cutMassAsym',
                                      'deltaEtaDijets_cutMassAsym', 100, 0, 5.)
    massAsymmetry_cutMassAsym = TH1F('massAsymmetry_cutMassAsym',
                                     'massAsymmetry_cutMassAsym', 20, 0, 1.)
    cosThetaStarDijet1_cutMassAsym = TH1F('cosThetaStarDijet1_cutMassAsym',
                                          'cosThetaStarDijet1_cutMassAsym', 20,
                                          0, 1.)
    cosThetaStarDijet2_cutMassAsym = TH1F('cosThetaStarDijet2_cutMassAsym',
                                          'cosThetaStarDijet2_cutMassAsym', 20,
                                          0, 1.)
    deltaDijet1_cutMassAsym = TH1F('deltaDijet1_cutMassAsym',
                                   'deltaDijet1_cutMassAsym', 1000, -1000,
                                   1000.)
    deltaDijet2_cutMassAsym = TH1F('deltaDijet2_cutMassAsym',
                                   'deltaDijet2_cutMassAsym', 1000, -1000,
                                   1000.)
    xi1_cutMassAsym = TH1F('xi1_cutMassAsym', 'xi1_cutMassAsym', 20, 0, 1.)
    xi2_cutMassAsym = TH1F('xi2_cutMassAsym', 'xi2_cutMassAsym', 20, 0, 1.)
    deltaRDijet1_cutMassAsym = TH1F('deltaRDijet1_cutMassAsym',
                                    'deltaRDijet1_cutMassAsym', 50, 0, 5.)
    deltaRDijet2_cutMassAsym = TH1F('deltaRDijet2_cutMassAsym',
                                    'deltaRDijet2_cutMassAsym', 50, 0, 5.)
    massAveVsDijet1sPt_cutMassAsym = TH2F('massAveVsDijet1sPt_cutMassAsym',
                                          'massAveVsDijet1sPt_cutMassAsym',
                                          nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsDijet2sPt_cutMassAsym = TH2F('massAveVsDijet2sPt_cutMassAsym',
                                          'massAveVsDijet2sPt_cutMassAsym',
                                          nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsdeltaDijet1_cutMassAsym = TH2F(
        'massAveVsdeltaDijet1_cutMassAsym', 'massAveVsdeltaDijet1_cutMassAsym',
        nBinsMass, 0, maxMass, 1000, -1000, 1000)
    massAveVsdeltaDijet2_cutMassAsym = TH2F(
        'massAveVsdeltaDijet2_cutMassAsym', 'massAveVsdeltaDijet2_cutMassAsym',
        nBinsMass, 0, maxMass, 1000, -1000, 1000)
    massAveVsmindR_cutMassAsym = TH2F('massAveVsmindR_cutMassAsym',
                                      'massAveVsmindR_cutMassAsym', nBinsMass,
                                      0, maxMass, 100, 0, 5)
    massAveVsdeltaRDijet1_cutMassAsym = TH2F(
        'massAveVsdeltaRDijet1_cutMassAsym',
        'massAveVsdeltaRDijet1_cutMassAsym', nBinsMass, 0, maxMass, 50, 0, 5)
    massAveVsdeltaRDijet2_cutMassAsym = TH2F(
        'massAveVsdeltaRDijet2_cutMassAsym',
        'massAveVsdeltaRDijet2_cutMassAsym', nBinsMass, 0, maxMass, 50, 0, 5)

    mindR_cutDEta = TH1F('mindR_cutDEta', 'mindR_cutDEta', 100, 0, 5.)
    massAve_cutDEta = TH1F('massAve_cutDEta', 'massAve_cutDEta', nBinsMass, 0,
                           maxMass)
    deltaEtaDijet1_cutDEta = TH1F('deltaEtaDijet1_cutDEta',
                                  'deltaEtaDijet1_cutDEta', 100, 0, 5.)
    deltaEtaDijet2_cutDEta = TH1F('deltaEtaDijet2_cutDEta',
                                  'deltaEtaDijet2_cutDEta', 100, 0, 5.)
    deltaEtaAveDijets_cutDEta = TH1F('deltaEtaAveDijets_cutDEta',
                                     'deltaEtaAveDijets_cutDEta', 100, 0, 5.)
    deltaEtaDijets_cutDEta = TH1F('deltaEtaDijets_cutDEta',
                                  'deltaEtaDijets_cutDEta', 100, 0, 5.)
    massAsymmetry_cutDEta = TH1F('massAsymmetry_cutDEta',
                                 'massAsymmetry_cutDEta', 20, 0, 1.)
    cosThetaStarDijet1_cutDEta = TH1F('cosThetaStarDijet1_cutDEta',
                                      'cosThetaStarDijet1_cutDEta', 20, 0, 1.)
    cosThetaStarDijet2_cutDEta = TH1F('cosThetaStarDijet2_cutDEta',
                                      'cosThetaStarDijet2_cutDEta', 20, 0, 1.)
    deltaDijet1_cutDEta = TH1F('deltaDijet1_cutDEta', 'deltaDijet1_cutDEta',
                               1000, -1000, 1000.)
    deltaDijet2_cutDEta = TH1F('deltaDijet2_cutDEta', 'deltaDijet2_cutDEta',
                               1000, -1000, 1000.)
    xi1_cutDEta = TH1F('xi1_cutDEta', 'xi1_cutDEta', 20, 0, 1.)
    xi2_cutDEta = TH1F('xi2_cutDEta', 'xi2_cutDEta', 20, 0, 1.)
    deltaRDijet1_cutDEta = TH1F('deltaRDijet1_cutDEta', 'deltaRDijet1_cutDEta',
                                50, 0, 5.)
    deltaRDijet2_cutDEta = TH1F('deltaRDijet2_cutDEta', 'deltaRDijet2_cutDEta',
                                50, 0, 5.)
    massAveVsDijet1sPt_cutDEta = TH2F('massAveVsDijet1sPt_cutDEta',
                                      'massAveVsDijet1sPt_cutDEta', nBinsMass,
                                      0, maxMass, 100, 0, 1000)
    massAveVsDijet2sPt_cutDEta = TH2F('massAveVsDijet2sPt_cutDEta',
                                      'massAveVsDijet2sPt_cutDEta', nBinsMass,
                                      0, maxMass, 100, 0, 1000)
    massAveVsdeltaDijet1_cutDEta = TH2F('massAveVsdeltaDijet1_cutDEta',
                                        'massAveVsdeltaDijet1_cutDEta',
                                        nBinsMass, 0, maxMass, 1000, -1000,
                                        1000)
    massAveVsdeltaDijet2_cutDEta = TH2F('massAveVsdeltaDijet2_cutDEta',
                                        'massAveVsdeltaDijet2_cutDEta',
                                        nBinsMass, 0, maxMass, 1000, -1000,
                                        1000)
    massAveVsmindR_cutDEta = TH2F('massAveVsmindR_cutDEta',
                                  'massAveVsmindR_cutDEta', nBinsMass, 0,
                                  maxMass, 100, 0, 5)
    massAveVsdeltaRDijet1_cutDEta = TH2F('massAveVsdeltaRDijet1_cutDEta',
                                         'massAveVsdeltaRDijet1_cutDEta',
                                         nBinsMass, 0, maxMass, 50, 0, 5)
    massAveVsdeltaRDijet2_cutDEta = TH2F('massAveVsdeltaRDijet2_cutDEta',
                                         'massAveVsdeltaRDijet2_cutDEta',
                                         nBinsMass, 0, maxMass, 50, 0, 5)

    mindR_cutDelta = TH1F('mindR_cutDelta', 'mindR_cutDelta', 100, 0, 5.)
    massAve_cutDelta = TH1F('massAve_cutDelta', 'massAve_cutDelta', nBinsMass,
                            0, maxMass)
    massAve_cutDelta240 = TH1F('massAve_cutDelta240', 'massAve_cutDelta240',
                               nBinsMass, 0, maxMass)
    massAve_cutDelta220 = TH1F('massAve_cutDelta220', 'massAve_cutDelta220',
                               nBinsMass, 0, maxMass)
    massAve_cutDelta180 = TH1F('massAve_cutDelta180', 'massAve_cutDelta180',
                               nBinsMass, 0, maxMass)
    massAve_cutDelta160 = TH1F('massAve_cutDelta160', 'massAve_cutDelta160',
                               nBinsMass, 0, maxMass)
    deltaEtaDijet1_cutDelta = TH1F('deltaEtaDijet1_cutDelta',
                                   'deltaEtaDijet1_cutDelta', 100, 0, 5.)
    deltaEtaDijet2_cutDelta = TH1F('deltaEtaDijet2_cutDelta',
                                   'deltaEtaDijet2_cutDelta', 100, 0, 5.)
    deltaEtaAveDijets_cutDelta = TH1F('deltaEtaAveDijets_cutDelta',
                                      'deltaEtaAveDijets_cutDelta', 100, 0, 5.)
    deltaEtaDijets_cutDelta = TH1F('deltaEtaDijets_cutDelta',
                                   'deltaEtaDijets_cutDelta', 100, 0, 5.)
    massAsymmetry_cutDelta = TH1F('massAsymmetry_cutDelta',
                                  'massAsymmetry_cutDelta', 20, 0, 1.)
    cosThetaStarDijet1_cutDelta = TH1F('cosThetaStarDijet1_cutDelta',
                                       'cosThetaStarDijet1_cutDelta', 20, 0,
                                       1.)
    cosThetaStarDijet2_cutDelta = TH1F('cosThetaStarDijet2_cutDelta',
                                       'cosThetaStarDijet2_cutDelta', 20, 0,
                                       1.)
    deltaDijet1_cutDelta = TH1F('deltaDijet1_cutDelta', 'deltaDijet1_cutDelta',
                                1000, -1000, 1000.)
    deltaDijet2_cutDelta = TH1F('deltaDijet2_cutDelta', 'deltaDijet2_cutDelta',
                                1000, -1000, 1000.)
    xi1_cutDelta = TH1F('xi1_cutDelta', 'xi1_cutDelta', 20, 0, 1.)
    xi2_cutDelta = TH1F('xi2_cutDelta', 'xi2_cutDelta', 20, 0, 1.)
    deltaRDijet1_cutDelta = TH1F('deltaRDijet1_cutDelta',
                                 'deltaRDijet1_cutDelta', 50, 0, 5.)
    deltaRDijet2_cutDelta = TH1F('deltaRDijet2_cutDelta',
                                 'deltaRDijet2_cutDelta', 50, 0, 5.)
    massAveVsDijet1sPt_cutDelta = TH2F('massAveVsDijet1sPt_cutDelta',
                                       'massAveVsDijet1sPt_cutDelta',
                                       nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsDijet2sPt_cutDelta = TH2F('massAveVsDijet2sPt_cutDelta',
                                       'massAveVsDijet2sPt_cutDelta',
                                       nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsdeltaDijet1_cutDelta = TH2F('massAveVsdeltaDijet1_cutDelta',
                                         'massAveVsdeltaDijet1_cutDelta',
                                         nBinsMass, 0, maxMass, 1000, -1000,
                                         1000)
    massAveVsdeltaDijet2_cutDelta = TH2F('massAveVsdeltaDijet2_cutDelta',
                                         'massAveVsdeltaDijet2_cutDelta',
                                         nBinsMass, 0, maxMass, 1000, -1000,
                                         1000)
    massAveVsmindR_cutDelta = TH2F('massAveVsmindR_cutDelta',
                                   'massAveVsmindR_cutDelta', nBinsMass, 0,
                                   maxMass, 100, 0, 5)
    massAveVsdeltaRDijet1_cutDelta = TH2F('massAveVsdeltaRDijet1_cutDelta',
                                          'massAveVsdeltaRDijet1_cutDelta',
                                          nBinsMass, 0, maxMass, 50, 0, 5)
    massAveVsdeltaRDijet2_cutDelta = TH2F('massAveVsdeltaRDijet2_cutDelta',
                                          'massAveVsdeltaRDijet2_cutDelta',
                                          nBinsMass, 0, maxMass, 50, 0, 5)

    mindR_cutCosTheta = TH1F('mindR_cutCosTheta', 'mindR_cutCosTheta', 100, 0,
                             5.)
    massAve_cutCosTheta = TH1F('massAve_cutCosTheta', 'massAve_cutCosTheta',
                               nBinsMass, 0, maxMass)
    massAve_cutCosTheta65 = TH1F('massAve_cutCosTheta65',
                                 'massAve_cutCosTheta65', nBinsMass, 0,
                                 maxMass)
    massAve_cutCosTheta55 = TH1F('massAve_cutCosTheta55',
                                 'massAve_cutCosTheta55', nBinsMass, 0,
                                 maxMass)
    deltaEtaDijet1_cutCosTheta = TH1F('deltaEtaDijet1_cutCosTheta',
                                      'deltaEtaDijet1_cutCosTheta', 100, 0, 5.)
    deltaEtaDijet2_cutCosTheta = TH1F('deltaEtaDijet2_cutCosTheta',
                                      'deltaEtaDijet2_cutCosTheta', 100, 0, 5.)
    deltaEtaAveDijets_cutCosTheta = TH1F('deltaEtaAveDijets_cutCosTheta',
                                         'deltaEtaAveDijets_cutCosTheta', 100,
                                         0, 5.)
    deltaEtaDijets_cutCosTheta = TH1F('deltaEtaDijets_cutCosTheta',
                                      'deltaEtaDijets_cutCosTheta', 100, 0, 5.)
    massAsymmetry_cutCosTheta = TH1F('massAsymmetry_cutCosTheta',
                                     'massAsymmetry_cutCosTheta', 20, 0, 1.)
    cosThetaStarDijet1_cutCosTheta = TH1F('cosThetaStarDijet1_cutCosTheta',
                                          'cosThetaStarDijet1_cutCosTheta', 20,
                                          0, 1.)
    cosThetaStarDijet2_cutCosTheta = TH1F('cosThetaStarDijet2_cutCosTheta',
                                          'cosThetaStarDijet2_cutCosTheta', 20,
                                          0, 1.)
    deltaDijet1_cutCosTheta = TH1F('deltaDijet1_cutCosTheta',
                                   'deltaDijet1_cutCosTheta', 1000, -1000,
                                   1000.)
    deltaDijet2_cutCosTheta = TH1F('deltaDijet2_cutCosTheta',
                                   'deltaDijet2_cutCosTheta', 1000, -1000,
                                   1000.)
    xi1_cutCosTheta = TH1F('xi1_cutCosTheta', 'xi1_cutCosTheta', 20, 0, 1.)
    xi2_cutCosTheta = TH1F('xi2_cutCosTheta', 'xi2_cutCosTheta', 20, 0, 1.)
    deltaRDijet1_cutCosTheta = TH1F('deltaRDijet1_cutCosTheta',
                                    'deltaRDijet1_cutCosTheta', 50, 0, 5.)
    deltaRDijet2_cutCosTheta = TH1F('deltaRDijet2_cutCosTheta',
                                    'deltaRDijet2_cutCosTheta', 50, 0, 5.)
    massAveVsDijet1sPt_cutCosTheta = TH2F('massAveVsDijet1sPt_cutCosTheta',
                                          'massAveVsDijet1sPt_cutCosTheta',
                                          nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsDijet2sPt_cutCosTheta = TH2F('massAveVsDijet2sPt_cutCosTheta',
                                          'massAveVsDijet2sPt_cutCosTheta',
                                          nBinsMass, 0, maxMass, 100, 0, 1000)
    massAveVsdeltaDijet1_cutCosTheta = TH2F(
        'massAveVsdeltaDijet1_cutCosTheta', 'massAveVsdeltaDijet1_cutCosTheta',
        nBinsMass, 0, maxMass, 1000, -1000, 1000)
    massAveVsdeltaDijet2_cutCosTheta = TH2F(
        'massAveVsdeltaDijet2_cutCosTheta', 'massAveVsdeltaDijet2_cutCosTheta',
        nBinsMass, 0, maxMass, 1000, -1000, 1000)
    massAveVsmindR_cutCosTheta = TH2F('massAveVsmindR_cutCosTheta',
                                      'massAveVsmindR_cutCosTheta', nBinsMass,
                                      0, maxMass, 100, 0, 5)
    massAveVsdeltaRDijet1_cutCosTheta = TH2F(
        'massAveVsdeltaRDijet1_cutCosTheta',
        'massAveVsdeltaRDijet1_cutCosTheta', nBinsMass, 0, maxMass, 50, 0, 5)
    massAveVsdeltaRDijet2_cutCosTheta = TH2F(
        'massAveVsdeltaRDijet2_cutCosTheta',
        'massAveVsdeltaRDijet2_cutCosTheta', nBinsMass, 0, maxMass, 50, 0, 5)

    ###################################### Get GenTree
    events = inputFile.Get('RUNATree/RUNATree')
    numEntries = events.GetEntriesFast()

    print '------> Number of events: ' + str(numEntries)
    d = 0
    newLumi = 0
    tmpLumi = 0
    eventsRaw = eventsHT = eventsPassed = eventsDijet = eventsMassAsym = eventsDEta = eventsDEtaSubjet = eventsDEtaTau21 = eventsDEtaTau31 = eventsCosTheta = eventsTau21 = eventsTau21CosTheta = eventsTau21CosThetaDEta = 0
    for i in xrange(numEntries):
        events.GetEntry(i)
        eventsRaw += 1
        #if eventsRaw > 2000: break

        #---- progress of the reading --------
        fraction = 10. * i / (1. * numEntries)
        if TMath.FloorNint(fraction) > d:
            print str(10 * TMath.FloorNint(fraction)) + '%'
        d = TMath.FloorNint(fraction)

        Run = events.run
        Lumi = events.lumi
        NumEvent = events.event
        #print 'Entry ', Run, ':', Lumi, ':', NumEvent

        HT = events.HT
        numJets = events.numJets
        numPV = events.numPV
        puWeight = events.puWeight
        lumiWeight = events.lumiWeight
        HT = events.HT
        mass1 = events.mass1
        mass2 = events.mass2
        avgMass = events.avgMass
        delta1 = events.delta1
        delta2 = events.delta2
        massRes = events.massRes
        eta1 = events.eta1
        eta2 = events.eta2
        deltaEta = events.deltaEta
        jetsPt = events.jetsPt
        jetsEta = events.jetsEta
        jetsPhi = events.jetsPhi
        jetsE = events.jetsE

        if 'Data' in samples: scale = 1
        else: scale = 2476 * puWeight * lumiWeight
        j1 = TLorentzVector()
        j2 = TLorentzVector()
        j3 = TLorentzVector()
        j4 = TLorentzVector()

        jet4Pt = min([jetsPt[0], jetsPt[1], jetsPt[2], jetsPt[3]])
        if (len(jetsPt) == 4) and (jet4Pt > 80):

            j1.SetPtEtaPhiE(jetsPt[0], jetsEta[0], jetsPhi[0], jetsE[0])
            j2.SetPtEtaPhiE(jetsPt[1], jetsEta[1], jetsPhi[1], jetsE[1])
            j3.SetPtEtaPhiE(jetsPt[2], jetsEta[2], jetsPhi[2], jetsE[2])
            j4.SetPtEtaPhiE(jetsPt[3], jetsEta[3], jetsPhi[3], jetsE[3])

            pairMass = MassAsyming(j1, j2, j3, j4)
            pairoff08 = DeltaRPairing(j1, j2, j3, j4, 0.8)

            if pairoff08[0]:
                variables = dijetVar(pairoff08[1:5])
                j4Pt[0] = jet4Pt
                ht[0] = HT
                weight[0] = scale
                mindR[0] = mindRpair08 = pairoff08[5]
                dijet1Mass[0] = dijet1Masspair08 = (pairoff08[1] +
                                                    pairoff08[2]).M()
                dijet1sPt[0] = dijet1sPtpair08 = pairoff08[1].Pt(
                ) + pairoff08[2].Pt()
                dijet2Mass[0] = dijet2Masspair08 = (pairoff08[3] +
                                                    pairoff08[4]).M()
                dijet2sPt[0] = dijet2sPtpair08 = pairoff08[3].Pt(
                ) + pairoff08[4].Pt()
                massAve[0] = massAvepair08 = variables[0]
                deltaEtaDijet1[0] = deltaEtaDijet1pair08 = variables[1]
                deltaEtaDijet2[0] = deltaEtaDijet2pair08 = variables[2]
                deltaEtaAveDijets[0] = deltaEtaAveDijetspair08 = variables[3]
                deltaEtaDijets[0] = deltaEtaDijetspair08 = variables[4]
                massAsymmetry[0] = massAsymmetrypair08 = variables[5]
                cosThetaStarDijet1[0] = cosThetaStarDijet1pair08 = variables[6]
                cosThetaStarDijet2[0] = cosThetaStarDijet2pair08 = variables[7]
                deltaDijet1[0] = deltaDijet1pair08 = variables[8]
                deltaDijet2[0] = deltaDijet2pair08 = variables[9]
                xi1[0] = xi1pair08 = variables[10]
                xi2[0] = xi2pair08 = variables[11]
                deltaRDijet1[0] = deltaRDijet1pair08 = variables[12]
                deltaRDijet2[0] = deltaRDijet2pair08 = variables[13]

                hmindR.Fill(mindRpair08, scale)
                hmassAve.Fill(massAvepair08, scale)
                hdeltaEtaDijet1.Fill(deltaEtaDijet1pair08, scale)
                hdeltaEtaDijet2.Fill(deltaEtaDijet2pair08, scale)
                hdeltaEtaDijets.Fill(deltaEtaDijetspair08, scale)
                hdeltaEtaAveDijets.Fill(deltaEtaAveDijetspair08, scale)
                hmassAsymmetry.Fill(massAsymmetrypair08, scale)
                hcosThetaStarDijet1.Fill(cosThetaStarDijet1pair08, scale)
                hcosThetaStarDijet2.Fill(cosThetaStarDijet2pair08, scale)
                hdeltaDijet1.Fill(deltaDijet1pair08, scale)
                hdeltaDijet2.Fill(deltaDijet2pair08, scale)
                hxi1.Fill(xi1pair08, scale)
                hxi2.Fill(xi2pair08, scale)
                hdeltaRDijet1.Fill(deltaRDijet1pair08, scale)
                hdeltaRDijet2.Fill(deltaRDijet2pair08, scale)

                massAveVsDijet1sPt.Fill(massAvepair08, dijet1sPtpair08, scale)
                massAveVsDijet2sPt.Fill(massAvepair08, dijet2sPtpair08, scale)
                massAveVsdeltaDijet1.Fill(massAvepair08, deltaDijet1pair08,
                                          scale)
                massAveVsdeltaDijet2.Fill(massAvepair08, deltaDijet2pair08,
                                          scale)
                massAveVsmindR.Fill(massAvepair08, mindRpair08, scale)
                massAveVsdeltaRDijet1.Fill(massAvepair08, deltaRDijet1pair08,
                                           scale)
                massAveVsdeltaRDijet2.Fill(massAvepair08, deltaRDijet2pair08,
                                           scale)

                if (massAsymmetrypair08 < 0.2):

                    mindR_cutMassAsym.Fill(mindRpair08, scale)
                    massAve_cutMassAsym.Fill(massAvepair08, scale)
                    deltaEtaDijet1_cutMassAsym.Fill(deltaEtaDijet1pair08,
                                                    scale)
                    deltaEtaDijet2_cutMassAsym.Fill(deltaEtaDijet2pair08,
                                                    scale)
                    deltaEtaDijets_cutMassAsym.Fill(deltaEtaDijetspair08,
                                                    scale)
                    deltaEtaAveDijets_cutMassAsym.Fill(deltaEtaAveDijetspair08,
                                                       scale)
                    massAsymmetry_cutMassAsym.Fill(massAsymmetrypair08, scale)
                    cosThetaStarDijet1_cutMassAsym.Fill(
                        cosThetaStarDijet1pair08, scale)
                    cosThetaStarDijet2_cutMassAsym.Fill(
                        cosThetaStarDijet2pair08, scale)
                    deltaDijet1_cutMassAsym.Fill(deltaDijet1pair08, scale)
                    deltaDijet2_cutMassAsym.Fill(deltaDijet2pair08, scale)
                    xi1_cutMassAsym.Fill(xi1pair08, scale)
                    xi2_cutMassAsym.Fill(xi2pair08, scale)
                    deltaRDijet1_cutMassAsym.Fill(deltaRDijet1pair08, scale)
                    deltaRDijet2_cutMassAsym.Fill(deltaRDijet2pair08, scale)

                    massAveVsDijet1sPt_cutMassAsym.Fill(
                        massAvepair08, dijet1sPtpair08, scale)
                    massAveVsDijet2sPt_cutMassAsym.Fill(
                        massAvepair08, dijet2sPtpair08, scale)
                    massAveVsdeltaDijet1_cutMassAsym.Fill(
                        massAvepair08, deltaDijet1pair08, scale)
                    massAveVsdeltaDijet2_cutMassAsym.Fill(
                        massAvepair08, deltaDijet2pair08, scale)
                    massAveVsmindR_cutMassAsym.Fill(massAvepair08, mindRpair08,
                                                    scale)
                    massAveVsdeltaRDijet1_cutMassAsym.Fill(
                        massAvepair08, deltaRDijet1pair08, scale)
                    massAveVsdeltaRDijet2_cutMassAsym.Fill(
                        massAvepair08, deltaRDijet2pair08, scale)

                    if (deltaEtaDijetspair08 < 0.75):

                        mindR_cutDEta.Fill(mindRpair08, scale)
                        massAve_cutDEta.Fill(massAvepair08, scale)
                        deltaEtaDijet1_cutDEta.Fill(deltaEtaDijet1pair08,
                                                    scale)
                        deltaEtaDijet2_cutDEta.Fill(deltaEtaDijet2pair08,
                                                    scale)
                        deltaEtaDijets_cutDEta.Fill(deltaEtaDijetspair08,
                                                    scale)
                        deltaEtaAveDijets_cutDEta.Fill(deltaEtaAveDijetspair08,
                                                       scale)
                        massAsymmetry_cutDEta.Fill(massAsymmetrypair08, scale)
                        cosThetaStarDijet1_cutDEta.Fill(
                            cosThetaStarDijet1pair08, scale)
                        cosThetaStarDijet2_cutDEta.Fill(
                            cosThetaStarDijet2pair08, scale)
                        deltaDijet1_cutDEta.Fill(deltaDijet1pair08, scale)
                        deltaDijet2_cutDEta.Fill(deltaDijet2pair08, scale)
                        xi1_cutDEta.Fill(xi1pair08, scale)
                        xi2_cutDEta.Fill(xi2pair08, scale)
                        deltaRDijet1_cutDEta.Fill(deltaRDijet1pair08, scale)
                        deltaRDijet2_cutDEta.Fill(deltaRDijet2pair08, scale)

                        massAveVsDijet1sPt_cutDEta.Fill(
                            massAvepair08, dijet1sPtpair08, scale)
                        massAveVsDijet2sPt_cutDEta.Fill(
                            massAvepair08, dijet2sPtpair08, scale)
                        massAveVsdeltaDijet1_cutDEta.Fill(
                            massAvepair08, deltaDijet1pair08, scale)
                        massAveVsdeltaDijet2_cutDEta.Fill(
                            massAvepair08, deltaDijet2pair08, scale)
                        massAveVsmindR_cutDEta.Fill(massAvepair08, mindRpair08,
                                                    scale)
                        massAveVsdeltaRDijet1_cutDEta.Fill(
                            massAvepair08, deltaRDijet1pair08, scale)
                        massAveVsdeltaRDijet2_cutDEta.Fill(
                            massAvepair08, deltaRDijet2pair08, scale)

                        if ((deltaDijet1pair08 > 180)
                                and (deltaDijet2pair08 > 180)):

                            mindR_cutDelta.Fill(mindRpair08, scale)
                            massAve_cutDelta.Fill(massAvepair08, scale)
                            deltaEtaDijet1_cutDelta.Fill(
                                deltaEtaDijet1pair08, scale)
                            deltaEtaDijet2_cutDelta.Fill(
                                deltaEtaDijet2pair08, scale)
                            deltaEtaDijets_cutDelta.Fill(
                                deltaEtaDijetspair08, scale)
                            deltaEtaAveDijets_cutDelta.Fill(
                                deltaEtaAveDijetspair08, scale)
                            massAsymmetry_cutDelta.Fill(
                                massAsymmetrypair08, scale)
                            cosThetaStarDijet1_cutDelta.Fill(
                                cosThetaStarDijet1pair08, scale)
                            cosThetaStarDijet2_cutDelta.Fill(
                                cosThetaStarDijet2pair08, scale)
                            deltaDijet1_cutDelta.Fill(deltaDijet1pair08, scale)
                            deltaDijet2_cutDelta.Fill(deltaDijet2pair08, scale)
                            xi1_cutDelta.Fill(xi1pair08, scale)
                            xi2_cutDelta.Fill(xi2pair08, scale)
                            deltaRDijet1_cutDelta.Fill(deltaRDijet1pair08,
                                                       scale)
                            deltaRDijet2_cutDelta.Fill(deltaRDijet2pair08,
                                                       scale)

                            massAveVsDijet1sPt_cutDelta.Fill(
                                massAvepair08, dijet1sPtpair08, scale)
                            massAveVsDijet2sPt_cutDelta.Fill(
                                massAvepair08, dijet2sPtpair08, scale)
                            massAveVsdeltaDijet1_cutDelta.Fill(
                                massAvepair08, deltaDijet1pair08, scale)
                            massAveVsdeltaDijet2_cutDelta.Fill(
                                massAvepair08, deltaDijet2pair08, scale)
                            massAveVsmindR_cutDelta.Fill(
                                massAvepair08, mindRpair08, scale)
                            massAveVsdeltaRDijet1_cutDelta.Fill(
                                massAvepair08, deltaRDijet1pair08, scale)
                            massAveVsdeltaRDijet2_cutDelta.Fill(
                                massAvepair08, deltaRDijet2pair08, scale)

                        if ((cosThetaStarDijet1pair08 < .60)
                                and (cosThetaStarDijet2pair08 < .60)):

                            mindR_cutCosTheta.Fill(mindRpair08, scale)
                            massAve_cutCosTheta.Fill(massAvepair08, scale)
                            deltaEtaDijet1_cutCosTheta.Fill(
                                deltaEtaDijet1pair08, scale)
                            deltaEtaDijet2_cutCosTheta.Fill(
                                deltaEtaDijet2pair08, scale)
                            deltaEtaDijets_cutCosTheta.Fill(
                                deltaEtaDijetspair08, scale)
                            deltaEtaAveDijets_cutCosTheta.Fill(
                                deltaEtaAveDijetspair08, scale)
                            massAsymmetry_cutCosTheta.Fill(
                                massAsymmetrypair08, scale)
                            cosThetaStarDijet1_cutCosTheta.Fill(
                                cosThetaStarDijet1pair08, scale)
                            cosThetaStarDijet2_cutCosTheta.Fill(
                                cosThetaStarDijet2pair08, scale)
                            deltaDijet1_cutCosTheta.Fill(
                                deltaDijet1pair08, scale)
                            deltaDijet2_cutCosTheta.Fill(
                                deltaDijet2pair08, scale)
                            xi1_cutCosTheta.Fill(xi1pair08, scale)
                            xi2_cutCosTheta.Fill(xi2pair08, scale)
                            deltaRDijet1_cutCosTheta.Fill(
                                deltaRDijet1pair08, scale)
                            deltaRDijet2_cutCosTheta.Fill(
                                deltaRDijet2pair08, scale)

                            massAveVsDijet1sPt_cutCosTheta.Fill(
                                massAvepair08, dijet1sPtpair08, scale)
                            massAveVsDijet2sPt_cutCosTheta.Fill(
                                massAvepair08, dijet2sPtpair08, scale)
                            massAveVsdeltaDijet1_cutCosTheta.Fill(
                                massAvepair08, deltaDijet1pair08, scale)
                            massAveVsdeltaDijet2_cutCosTheta.Fill(
                                massAvepair08, deltaDijet2pair08, scale)
                            massAveVsmindR_cutCosTheta.Fill(
                                massAvepair08, mindRpair08, scale)
                            massAveVsdeltaRDijet1_cutCosTheta.Fill(
                                massAvepair08, deltaRDijet1pair08, scale)
                            massAveVsdeltaRDijet2_cutCosTheta.Fill(
                                massAvepair08, deltaRDijet2pair08, scale)

                        if ((cosThetaStarDijet1pair08 < .65)
                                and (cosThetaStarDijet2pair08 < .65)):
                            massAve_cutCosTheta65.Fill(massAvepair08, scale)
                        if ((cosThetaStarDijet1pair08 < .55)
                                and (cosThetaStarDijet2pair08 < .55)):
                            massAve_cutCosTheta55.Fill(massAvepair08, scale)

        tree.Fill()
    outputFile.Write()

    ##### Closing
    print 'Writing output file: ' + outputFileName
    outputFile.Close()