//________________________________________________________________________________________
int main(int argc, char* argv[]) {
// Default options
	bool isList = false;
	TString outputdir = "TempOutput/";
	TString filename  = "MassTree.root";
	TString setofcuts = "default";
	string  puScenario = "";
  	string  jsonFileName = "";
	string  data_PileUp = "";
	string  mc_PileUp = "";
	string  type = "mc";
	string  JEC  ="";
	string  btagFileName = "";
	bool isData  = false;
	bool isScan = false;
	int verbose  = 0;
	int maxEvents=-1;
	int ID       =-1;
	bool isS3    = false;
	bool noPU    = false;
    	bool removePhoton = false;
	string photon = "";
	string pdf = "";

// Parse options
	char ch;
	while ((ch = getopt(argc, argv, "s:d:o:v:j:m:n:p:P:t:r:b:i:C:w:lh?")) != -1 ) {
	  switch (ch) {
	  case 'd': outputdir       = TString(optarg);break;
	  case 'o': filename        = TString(optarg);break;
	  case 'v': verbose         = atoi(optarg);   break;
	  case 'j': jsonFileName    = string(optarg); break;
	  case 'm': setofcuts       = TString(optarg);break;
	  case 'n': maxEvents       = atoi(optarg);   break;
	  case 'p': data_PileUp     = string(optarg); break;
	  case 'P': mc_PileUp       = string(optarg); break;
	  case 't': type            = string(optarg); break;
	  case 'r': photon          = string(optarg); break;
	  case 'b': btagFileName    = string(optarg); break;
	  case 'w': pdf             = string(optarg); break;
	  case 'i': ID              = atoi(optarg);   break;
	  case 's': puScenario      = string(optarg); break;
          case 'C': JEC             = "/shome/pnef/MT2Analysis/Code/JetEnergyCorrection/"+string(optarg)+"/"; break;
	  case 'l': isList          = true; break;
	    //case 'noPU': noPU = true; break;  
	  case '?':
	  case 'h': usage(0); break;
	  default:
	    cerr << "*** Error: unknown option " << optarg << std::endl;
	    usage(-1);
	  }
	}

	argc -= optind;
	argv += optind;

// Check arguments
	if( argc<1 ) {
		usage(-1);
	}
	if      (type=="data") isData =true;
	else if (type=="mc"  ) isData =false;
	else if (type=="scan"  ) isScan =true;
	else    usage(-1);
	if      (photon == "photon") removePhoton=true;
	if      (!isData && data_PileUp.length()==0  ) {
		cout << "                        WARNING: need data_PileUp to run on MC " << endl;
	}
	if      ( isData && (data_PileUp.length() >0 || mc_PileUp.length() >0)  ) {
		cout << "ERROR: you are running on data, no reweighting needed... " << endl; exit(-1);
	}

	setofcuts   ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/MT2_cuts/"+setofcuts+".dat";
	if(data_PileUp.length()!=0){data_PileUp ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/pileUp_data/"+data_PileUp;}
	//if(mc_PileUp.length()  !=0){mc_PileUp   ="/shome/haweber/MT2Analysis/Code/Certification/pileUp_mc/"  + mc_PileUp;}
	if(mc_PileUp.length()  !=0){mc_PileUp   ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/pileUp_mc/"  + mc_PileUp;}
	//setofcuts   ="/shome/leo/Analysis/MT2_cuts/"+setofcuts+".dat";
	//if(data_PileUp.length()!=0){data_PileUp ="/shome/leo/Analysis/Certification/pileUp_data/"+data_PileUp;}
//        if(mc_PileUp.length()  !=0){mc_PileUp   ="/shome/leo/Analysis/Certification/pileUp_mc/"  + mc_PileUp;}

	if(jsonFileName.length() !=0){jsonFileName="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/"           +jsonFileName;}
	if(btagFileName.length() !=0){btagFileName="/shome/haweber/MT2Analysis/Code/Efficiencies/" + btagFileName;}

	if(puScenario=="3D"){ isS3=true; noPU=true; } // THIS IS A DIRTY TRICK TO TEST 3D REWEIGHT WITHOUT ADD A NEW VAR
	if(puScenario=="S3") isS3=true;
	else if(puScenario=="noPU") noPU=true;

	TChain *theChain = new TChain("analyze/Analysis");
	for(int i = 0; i < argc; i++){
		if( !isList ){
			theChain->Add(argv[i]);
			printf(" Adding file: %s\n",argv[i]);
		} else {
			TString rootFile;
			ifstream is(argv[i]);
			while(rootFile.ReadLine(is) && (!rootFile.IsNull())){
				if(rootFile[0] == '#') continue;
				theChain->Add(rootFile);
				printf(" Adding file: %s\n", rootFile.Data());
			}
		}
	}


	cout << "--------------" << endl;
	cout << "OutputDir is:                   " << outputdir << endl;
	cout << "Type is:                        " << type << endl;
	cout << "Verbose level is:               " << verbose << endl;
  	cout << "JSON file is:                   " << (jsonFileName.length()>0?jsonFileName:"empty") << endl;
  	cout << "MC_PileUp file:                 " << (mc_PileUp.length()>0?mc_PileUp:"empty") << endl;
  	cout << "Data_PileUp file:               " << (data_PileUp.length()>0?data_PileUp:"empty") << endl;
  	if(btagFileName.length() !=0){
	cout << "btag file is:                   " << (btagFileName.length()>0?btagFileName:"empty") << endl;
	}
	if(noPU && !isS3) cout << "WARNING: NoPU option set, all the PU weights will be set to 1" << endl;
	cout << "Set of Cuts is:                 " << setofcuts << endl;
	cout << "Number of events:               " << theChain->GetEntries() << endl;
	if(JEC.length()!=0){
	cout << "Redo JEC with set               " << JEC << endl;
	}
	if(removePhoton){
	cout << "WARNING: Photon is added to MET and jet/ele match to photon is removed!!" << endl;
	}
	if(pdf=="pdf"){  cout << "Creating PDF weights" << endl; 
	}
	cout << "--------------" << endl;

	MT2Analyzer *tA = new MT2Analyzer(theChain);
	tA->SetOutputDir(outputdir);
	tA->SetVerbose(verbose);
	tA->SetMaxEvents(maxEvents);
	tA->SetProcessID(ID);
	tA->SetBTagEfficiency(btagFileName);
	tA->isS3 = isS3;
	tA->noPU = noPU;
	tA->isScan = isScan;
	tA->removePhoton = removePhoton;
	if(pdf=="pdf") tA->doPDF=true;
	else tA->doPDF=false;
  	if (jsonFileName!="") tA->ReadJSON(jsonFileName.c_str());
	tA->BeginJob(filename, setofcuts, isData, data_PileUp, mc_PileUp, JEC);
	tA->Loop();
	tA->EndJob();

	delete tA;
	return 0;
}
Exemple #2
0
//________________________________________________________________________________________
int main(int argc, char* argv[]) {
  	AutoLibraryLoader::enable();

// Default options
	bool isList = false;
	TString outputdir = "TempOutput/";
	TString filename  = "MassTree.root";
	TString setofcuts = "nocuts";
	string  puScenario = "noPU";
  	string  jsonFileName = "";
	string  data_PileUp = "";
	string  mc_PileUp = "";
	string  type = "mc";
	string  JEC  ="";
	string  btagFileName = "";
	string  htauFileName = "";
	bool isData  = false;
	bool isCHSJets = false;
	bool isType1MET = false;
	bool isFastSim = false;
	bool isScan = false;
	int verbose  = 0;
	int maxEvents=-1;
	int ID       =-1;
    	bool removePhoton = false;
    	bool removeZll    = false;
	string photon = "";
	string pdf = "";

// Parse options
	char ch;
	while ((ch = getopt(argc, argv, "s:d:o:v:j:m:n:p:P:t:r:b:u:i:C:w:eEflh?")) != -1 ) {
	  switch (ch) {
	  case 'd': outputdir       = TString(optarg);break;
	  case 'o': filename        = TString(optarg);break;
	  case 'v': verbose         = atoi(optarg);   break;
	  case 'j': jsonFileName    = string(optarg); break;
	  case 'm': setofcuts       = TString(optarg);break;
	  case 'n': maxEvents       = atoi(optarg);   break;
	  case 'p': data_PileUp     = string(optarg); break;
	  case 'P': mc_PileUp       = string(optarg); break;
	  case 't': type            = string(optarg); break;
	  case 'r': photon          = string(optarg); break;
	  case 'b': btagFileName    = string(optarg); break;
	  case 'u': htauFileName    = string(optarg); break;
	  case 'w': pdf             = string(optarg); break;
	  case 'i': ID              = atoi(optarg);   break;
	  case 's': puScenario      = string(optarg); break;
          case 'C': JEC             = string(optarg); break;
	  case 'e': isType1MET      = true; break;
	  case 'E': isCHSJets       = true; break; 
	  case 'f': isFastSim       = true; break; 
	  case 'l': isList          = true; break;
	    //case 'noPU': noPU = true; break;  
	  case '?':
	  case 'h': usage(0); break;
	  default:
	    cerr << "*** Error: unknown option " << optarg << std::endl;
	    usage(-1);
	  }
	}

	argc -= optind;
	argv += optind;

// Check arguments
	if( argc<1 ) {
		usage(-1);
	}
	if      (type=="data") isData =true;
	else if (type=="mc"  ) isData =false;
	else if (type=="scan"  ) isScan =true;
	else    usage(-1);
	if      (photon == "photon") removePhoton=true;
	if      (photon == "Zll"   ) removeZll   =true;
	if      (type=="data" && puScenario!="noPU"){ cout << "ERROR: this is data. don't run PUreweighting" << endl; exit(-1);}
	if      (type=="mc"   && (data_PileUp.length()==0 || mc_PileUp.length()==0) && puScenario!="noPU") {
		cout << "ERROR: need puScenario" << puScenario << " required input files."  << endl; exit(-1);
	}
	setofcuts   ="../../MT2_cuts/"+setofcuts+".dat";
	//	setofcuts   ="/dataLOCAL/MT2Top/CutsMT2/"+setofcuts+".dat";
	if(data_PileUp.length()!=0   ){data_PileUp ="/dataLOCAL/MT2Top/Certification/pileUp_data/"+ data_PileUp;}
	if(mc_PileUp.length()  !=0   ){mc_PileUp   ="/dataLOCAL/MT2Top/Certification/pileUp_mc/"  +   mc_PileUp;}
	if(jsonFileName.length() !=0 ){jsonFileName="/dataLOCAL/MT2Top/Certification/JSONfiles/"  +jsonFileName;}
//	setofcuts   ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/MT2_cuts/"+setofcuts+".dat";
//	if(data_PileUp.length()!=0   ){data_PileUp ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/pileUp_data/"+data_PileUp;}
//	if(mc_PileUp.length()  !=0   ){mc_PileUp   ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/pileUp_mc/"  + mc_PileUp;}
//	if(jsonFileName.length() !=0 ){jsonFileName="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/"            +jsonFileName;}
	if(btagFileName.length() !=0 ){btagFileName="/dataLOCAL/MT2Top/Efficiencies/"            + btagFileName;}
	if(htauFileName.length() !=0 ){htauFileName="/dataLOCAL/MT2Top/Efficiencies/"            + htauFileName;}



	/*

	//      setofcuts   ="/shome/haweber/MT2Analysis_8TeV/Code/CutsMT2/"+setofcuts+".dat";                                                      
        setofcuts = "/shome/paktinat/Top/CMSSW_5_3_7_patch5/src/MT2Analysis_V02-03-02/Code/MT2_Cuts/"+setofcuts+".dat";
        if(data_PileUp.length()!=0   ){data_PileUp ="/shome/haweber/MT2Analysis_8TeV/Code/Certification/pileUp_data/"+ data_PileUp;}
        if(mc_PileUp.length()  !=0   ){mc_PileUp   ="/shome/haweber/MT2Analysis_8TeV/Code/Certification/pileUp_mc/"  +   mc_PileUp;}
        //      if(jsonFileName.length() !=0 ){jsonFileName="/shome/haweber/MT2Analysis_8TeV/Code/Certification/JSONfiles/"  +jsonFileName;}        
        if(jsonFileName.length() !=0 ){jsonFileName="/shome/paktinat/Top/CMSSW_5_3_7_patch5/src/MT2Analysis_V02-03-02/Code/MT2_Cuts/" +jsonFileName\
;}

//      setofcuts   ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/MT2_cuts/"+setofcuts+".dat";                                                
//      if(data_PileUp.length()!=0   ){data_PileUp ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/pileUp_data/"+data_PileUp;}    
//      if(mc_PileUp.length()  !=0   ){mc_PileUp   ="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/pileUp_mc/"  + mc_PileUp;}     
//      if(jsonFileName.length() !=0 ){jsonFileName="/shome/pnef/Projects/CMSAnalysis/MT2Analysis/Code/Certification/"            +jsonFileName;}   
	if(btagFileName.length() !=0 ){btagFileName="/shome/haweber/MT2Analysis_8TeV/Code/Efficiencies/"            + btagFileName;}
        if(htauFileName.length() !=0 ){htauFileName="/shome/haweber/MT2Analysis_8TeV/Code/Efficiencies/"            + htauFileName;}

	*/








	std::vector<std::string> fileList;
	for(int i = 0; i < argc; i++){
		if( !isList ){
	    		fileList.push_back(argv[i]);
			printf(" Adding file: %s\n",argv[i]);
		} else {
			TString rootFile;
			ifstream is(argv[i]);
			while(rootFile.ReadLine(is) && (!rootFile.IsNull())){
	      			if(rootFile[0] == '#') continue;
				fileList.push_back(rootFile.Data());
				printf(" Adding file: %s\n", rootFile.Data());
	    		}
	  	}
	}


	cout << "--------------" << endl;
	cout << "OutputDir is:                   " << outputdir << endl;
	cout << "Type is:                        " << type << endl;
	cout << "isFastSim                       " << (isFastSim ? "true":"false") << endl;
	cout << "Verbose level is:               " << verbose << endl;
  	cout << "JSON file is:                   " << (jsonFileName.length()>0?jsonFileName:"empty") << endl;
  	cout << "MC_PileUp file:                 " << (mc_PileUp.length()>0?mc_PileUp:"empty") << endl;
  	cout << "Data_PileUp file:               " << (data_PileUp.length()>0?data_PileUp:"empty") << endl;
	cout << "PileUp Scenario:                " << puScenario << endl;
	cout << "ak5-PF have CHS                 " << (isCHSJets? "ENABLED":"DISABLED") << endl;
	cout << "pfMET is:                       " << (isType1MET? "Type1 corrected":"raw") << endl;
  	if(btagFileName.length() !=0){
	cout << "btag file is:                   " << (btagFileName.length()>0?btagFileName:"empty") << endl;
	}
  	if(htauFileName.length() !=0){
	cout << "hadronic tau file is:           " << (htauFileName.length()>0?htauFileName:"empty") << endl;
	}
	cout << "Set of Cuts is:                 " << setofcuts << endl;
	if(JEC.length()!=0){
	cout << "Redo JEC with GlobalTag         " << JEC << endl;
	}
	if(removePhoton){
	cout << "WARNING: Photon is added to MET and jet/ele match to photon is removed!!" << endl;
	}
	if(removeZll   ){
	cout << "WARNING: leptons from Z decay are added to MET (jet overlap already removed)" << endl;
	}
	if(pdf=="pdf"){  cout << "Creating PDF weights" << endl; 
	}
	cout << "--------------" << endl;

	MT2Analyzer *tA = new MT2Analyzer(fileList);
	tA->SetOutputDir(outputdir);
	tA->SetVerbose(verbose);
	tA->SetMaxEvents(maxEvents);
	tA->SetProcessID(ID);
	tA->SetBTagEfficiency(btagFileName);
	tA->SetHadTauEfficiency(htauFileName);
	tA->SetPUReweighting(puScenario);
	tA->SetType1MET(isType1MET);
	tA->SetCHSJets(isCHSJets);
	tA->SetFastSim(isFastSim);
	tA->isScan = isScan;
	tA->removePhoton = removePhoton;
	tA->removeZll    = removeZll;
	if(pdf=="pdf") tA->doPDF=true;
	else tA->doPDF=false;
  	if (jsonFileName!="") tA->ReadJSON(jsonFileName.c_str());
	tA->BeginJob(filename, setofcuts, isData, data_PileUp, mc_PileUp, JEC);
	tA->Loop();
	tA->EndJob();

	delete tA;
	return 0;
}