Esempio n. 1
0
treeNode* myTree(treeNode *head,char inBoard[BOARDROWS][BOARDCOLS],char pColour, char cColour){
    char boardHolder[BOARDROWS][BOARDCOLS];
    int numChildren;
    node* ptr;
    if (head->board[0][0] != 'W' && head->board[0][0] != 'B' && head->board[0][0] != 'O' ){  
        copyBoard(inBoard,head->board);
    }
    if (head->numChildren == 0){
        node* moves = getMoves(head->board,cColour,pColour);
        numChildren = getListSize(moves);
        head->numChildren = numChildren;
        //printf("Generated %i moves from the head node.\n", numChildren);
        head->children = malloc(sizeof(treeNode) * numChildren);
        for(int i=0;i<numChildren;i++){
	  // printf("for\n");
            copyBoard(head->board,boardHolder);
            applyMove(moves,boardHolder);
	    //printBoard(boardHolder);
            head->children[i] = malloc(sizeof(treeNode));
            copyBoard(boardHolder,head->children[i]->board);
            head->children[i]->numChildren = 0;
	    ptr = moves->next;
	    free(moves);
	    moves = ptr;
        }
    }else{//this should happen when there are already children in the tree
      for(int i=0;i<head->numChildren;i++){
	head->children[i] = myTree(head->children[i],head->children[i]->board,cColour,pColour);
      }
    }
    return head;
}
Esempio n. 2
0
void FillHistograms(TString SAMPLE)
{
  cout<<"Processing sample "<<SAMPLE<<endl;
  //TString PATH("root://eoscms//eos/cms/store/cmst3/user/kkousour/ttH/flat/");
  TString PATH("/afs/cern.ch/work/k/kkousour/private/CMSSW_7_4_12/src/KKousour/TopAnalysis/prod/ttH/");
  TFile *inf  = TFile::Open(PATH+"flatTree_"+SAMPLE+".root");
  TFile *outf = TFile::Open(TString::Format("Histo_%s.root",SAMPLE.Data()),"RECREATE");

  TIter nextKey(inf->GetListOfKeys());
  TKey *key;
  while ((key = (TKey*)nextKey())) {
    TString dirName(key->GetName());
    cout<<"Found directory "<<dirName<<endl;
    
    TH1F *hPass = (TH1F*)inf->Get(dirName+"/TriggerPass");
    outf->mkdir(dirName);  
    TDirectory *dir = (TDirectory*)outf->Get(dirName); 
    TTree *tr   = (TTree*)inf->Get(dirName+"/events");
    
    TreeClass myTree(tr);
    dir->cd();
    hPass->Write("TriggerPass");
    myTree.Loop(dir);
    cout<<"Loop finished"<<endl;
    dir->Close();
    delete tr;
  }
  outf->Close();
  inf->Close();
}
Esempio n. 3
0
File: tree.c Progetto: cclehui/study
int main(int argc, char *argv[]) {
    if (argc != 2) {
        showUsage(argc, argv, "tree directory");
        return;
    }

    myTree(argv[1], 0);
    
}
Esempio n. 4
0
void FillHistograms(TString SAMPLE)
{
  cout<<"Processing sample "<<SAMPLE<<endl;
  TString PATH("../../prod/ttbar/");
  TFile *inf  = TFile::Open(PATH+"flatTree_"+SAMPLE+".root");
  TFile *outf = TFile::Open(TString::Format("Histo_%s.root",SAMPLE.Data()),"RECREATE");

  TIter nextKey(inf->GetListOfKeys());
  TKey *key;
  while ((key = (TKey*)nextKey())) {
    TString dirName(key->GetName());
    cout<<"Found directory "<<dirName<<endl;
    
    TH1F *hPass = (TH1F*)inf->Get(dirName+"/TriggerPass");
    outf->mkdir(dirName);  
    TDirectory *dir = (TDirectory*)outf->Get(dirName); 
    TTree *tr   = (TTree*)inf->Get(dirName+"/events");
    if (dirName.Contains("Boost")) {
      TreeClassBoosted myTree(tr);
      dir->cd();
      hPass->Write("TriggerPass");
      myTree.Loop(dir);
      cout<<"Loop finished"<<endl;
      dir->Close();
      cout<<"directory closed"<<endl;
      delete tr;
      cout<<"Tree deleted"<<endl;
    }
    else {
      TreeClassResolved myTree(tr);
      dir->cd();
      hPass->Write("TriggerPass");
      myTree.Loop(dir);
      cout<<"Loop finished"<<endl;
      dir->Close();
      cout<<"directory closed"<<endl;
      delete tr;
      cout<<"Tree deleted"<<endl;
    }
  }
  outf->Close();
  inf->Close();
}
Esempio n. 5
0
int main(int argc, char* argv[]) {

  Tree myTree(5);
  myTree.insert(4);
  myTree.insert(6);
  myTree.insert(10);
  myTree.insert(24);
  myTree.print();

  return 0;  
}
Esempio n. 6
0
int main(void)
{
    typedef tree<double> treeType;
    typedef treeType::subTreeType subTreeType;

    treeType myTree(0);

    myTree.addSubTree(std::unique_ptr<subTreeType>(new treeType(1)));

    myTree.printTree();

    return 0;
}
Esempio n. 7
0
int main(int argc, char *argv[])
{
  std::string initName = cli::inputName();
  tree::Tree myTree(initName);

  cli::printUseMsg();

  char ch;
  while (std::cin >> ch) 
    {
      cli::clear();
      switch(ch)
	{
	case 'H':
	case 'h':
	  {
	    cli::printHelpMsg();
	    break;
	  }
	case 'I':
	case 'i':
	  {
	    std::string iName = cli::inputName();
	    if (cli::chooseBranch())
	      try
		{
		  myTree > iName;
		}
	      catch(tree::InsertError& e)
		{
		  std::cout << e << std::endl;
		}
	    else
	      try 
		{
		  myTree < iName;
		}
	      catch(tree::InsertError& e)
		{
		  std::cout << e << std::endl;
		}
	    break;
	  }
	case 'U':
	case 'u':
	  {
	    myTree.setName(cli::inputName());
	    break;
	  }
	case 'd':
	case 'D':
	  {
	    if (cli::chooseBranch())
	      {
		myTree.deleteRight();
	      }
	    else
	      {
		myTree.deleteLeft();
	      }
	    break;
	  }
	case 'L':
	case 'l':
	  {
	    try
	      {
		myTree.moveLeft();
	      }
	    catch (tree::AddressError& e)
	      {
		std::cout << e << std::endl; 
	      }
	    break;
	  }
	case 'R':
	case 'r':
	  {
	    try
	      {
		myTree.moveRight();
	      }
	    catch (tree::AddressError& e)
	      {
		std::cout << e << std::endl;
	      }
	    break;
	  }
	case 'T':
	case 't':
	  {
	    myTree.moveTop();
	    break;
	  }
	case 'G':
	case 'g': 
	  {
	    std::string oName = myTree.getName();
	    std::string oLeftName = "NULL";
	    std::string oRightName = "NULL";

	    try 
	      {
		myTree.moveLeft();
		oLeftName = myTree.getName();
		myTree.moveTop();
	      }
	    catch (tree::AddressError)
	      {
		oLeftName = "NULL";
	      }

	    try
	      {
		myTree.moveRight();
		oRightName = myTree.getName();
		myTree.moveTop();
	      }
	    catch (tree::AddressError)
	      {
		oRightName = "NULL";
	      }

	    std::cout << oName << ": "
		      << oLeftName << ", "
		      << oRightName << std::endl;
	    break;
	  }
	case 'P':
	case 'p':
	  {
	    std::cout << myTree;
	    break;
	  }
	case 'Q':
	case 'q':
	  {
	    return 0;
	  }
	default:
	  break;
	}
    }
  
  return 0;
}
Esempio n. 8
0
File: tree.c Progetto: cclehui/study
void myTree(char *path, int level) {

    if (level > 5) {
        return;
    } 
    
    int i = 0;
    char flagChar = '-';

    if (isDir(path) == 1) {
        int pathLength = strlen(path);
        DIR *dir;
        struct dirent *ptr;
        char *tempPath = NULL;
        int tempPathSize = 0;
        int pathIsNew = 0;

        if (*(path + pathLength - 1) != '/') {
            tempPath = malloc(pathLength + 2);
            memcpy(tempPath, path, pathLength);
            memcpy(tempPath + pathLength, suffix, 2);
            path = tempPath;

            tempPath = NULL;
            pathLength++;
            pathIsNew = 1;
        }

        dir = opendir(path);


        while ((ptr = readdir(dir)) != NULL) {

            if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0) {
                continue;
            }

            if ((pathLength + strlen(ptr->d_name) + 1) > tempPathSize) {
                if (tempPath != NULL) {
                    free(tempPath);
                }
                tempPathSize = pathLength + strlen(ptr->d_name) + 1;
                tempPath = malloc(pathLength + strlen(ptr->d_name) + 1);
            }

            memcpy(tempPath, path, pathLength);
            memcpy(tempPath + pathLength, ptr->d_name, strlen(ptr->d_name) + 1);

            putcharRepeat(flagChar, level);
            printf("%s\n", tempPath);

            if (isDir(tempPath) == 1) {
                putcharRepeat(flagChar, level);
                myTree(tempPath, level + 1);
            } 

        }
        
        if (tempPath != NULL) {
            free(tempPath);
            tempPath = NULL;
        }

        if (pathIsNew == 1) {
            free(path);
        }

        closedir(dir);
    } else {
        putcharRepeat(flagChar, level);
        printf("%s\n", path);
    }
}
Esempio n. 9
0
int main(int argc, char** argv)
{ 
 //Check if all nedeed arguments to parse are there                                                                                                                               
 if(argc != 2)
 {
  std::cerr << ">>>>> analysis.cpp::usage: " << argv[0] << " configFileName" << std::endl ;
  return 1;
 }
 
 // Parse the config file                                                                                                                                                          
 parseConfigFile (argv[1]) ;
 
 std::string treeName  = gConfigParser -> readStringOption("Input::treeName");
 std::string inputFile = gConfigParser -> readStringOption("Input::inputFile");
 
 int entryMAX = gConfigParser -> readIntOption("Input::entryMAX");
 int entryMIN = gConfigParser -> readIntOption("Input::entryMIN");
 int entryMOD = gConfigParser -> readIntOption("Input::entryMOD");
 
 std::cout << ">>>>> input::entryMIN  " << entryMIN  << std::endl;  
 std::cout << ">>>>> input::entryMAX  " << entryMAX  << std::endl;  
 std::cout << ">>>>> input::entryMOD  " << entryMOD  << std::endl;  
 
 // Open ntple
 TChain* chain = new TChain(treeName.c_str());
 chain->Add(inputFile.c_str());
 treeReader reader((TTree*)(chain));
 
 ///----------------
 ///---- output ----
 std::string OutFileName    = gConfigParser -> readStringOption("Output::outFileName");
 std::cout << ">>>>> Output::outFileName  " << OutFileName  << std::endl;  

 TFile outFile(OutFileName.c_str(),"RECREATE");
 outFile.cd();
 
 TTree myTree("myTree","myTree");
 double Eta;
 double pT;
 double ET;
 double EoP;
 double SwissE4;
 double MaxEnergy;
 TH2F *h2ShowerShapeEB = new TH2F("h2ShowerShapeEB","Shower Shape i#phi i#eta",170,-85,85,360,0,360);
 TH2F *h2ShowerShapeEE = new TH2F("h2ShowerShapeEE","Shower Shape ix iy",100,0,100,100,0,100);

 h2ShowerShapeEB->GetXaxis()->SetTitle("i#eta");
 h2ShowerShapeEB->GetYaxis()->SetTitle("i#phi");

 h2ShowerShapeEE->GetXaxis()->SetTitle("ix");
 h2ShowerShapeEE->GetYaxis()->SetTitle("iy");
 
 myTree.Branch("Eta",&Eta,"Eta/D");
 myTree.Branch("ET",&ET,"ET/D");
 myTree.Branch("pT",&pT,"pT/D");
 myTree.Branch("EoP",&EoP,"EoP/D");
 myTree.Branch("SwissE4",&SwissE4,"SwissE4/D");
 myTree.Branch("MaxEnergy",&MaxEnergy,"MaxEnergy/D");
 myTree.Branch("h2ShowerShapeEB","TH2F",&h2ShowerShapeEB,128000,0);
 myTree.Branch("h2ShowerShapeEE","TH2F",&h2ShowerShapeEE,128000,0);
 
 double start, end;
 
 if (entryMAX == -1) entryMAX = reader.GetEntries();
 else if (reader.GetEntries() < entryMAX) entryMAX = reader.GetEntries();
 
 start = clock();
 for(int iEvent = entryMIN ; iEvent < entryMAX ; ++iEvent) {
  reader.GetEntry(iEvent);
  if((iEvent%entryMOD) == 0) std::cout << ">>>>> analysis::GetEntry " << iEvent << ":" << entryMAX << std::endl;   

  h2ShowerShapeEB->Reset();
  h2ShowerShapeEE->Reset();
  int nXtal = reader.GetFloat("E_xtal")->size();
  for (int iXtal = 0; iXtal < nXtal; iXtal++){
   if (reader.GetInt("ix_xtal")->at(iXtal) == -1000) {
    ///==== Barrel EB ====
    h2ShowerShapeEB->Fill(reader.GetInt("ieta_xtal")->at(iXtal),reader.GetInt("iphi_xtal")->at(iXtal),reader.GetFloat("E_xtal")->at(iXtal));
   }
   else {
    ///==== Endcap EE ====
    h2ShowerShapeEE->Fill(reader.GetInt("ix_xtal")->at(iXtal),reader.GetInt("iy_xtal")->at(iXtal),reader.GetFloat("E_xtal")->at(iXtal));
   }
  }  
  
  if (reader.GetInt("runId")->size()!=0){
   TString TitleEB = Form ("Shower Shape i#phi i#eta Run = %d --- lumi = %d --- event = %d",reader.GetInt("runId")->at(0),reader.GetInt("lumiId")->at(0),reader.GetInt("eventId")->at(0));
   h2ShowerShapeEB->SetTitle(TitleEB);
   
   TString TitleEE = Form ("Shower Shape ix iy Run = %d --- lumi = %d --- event = %d",reader.GetInt("runId")->at(0),reader.GetInt("lumiId")->at(0),reader.GetInt("eventId")->at(0));
   h2ShowerShapeEE->SetTitle(TitleEE);
  }
  
  int nEles = reader.Get4V("electrons")->size();
  for (int iEle = 0; iEle < nEles; iEle++){
//    std::cerr << "iEle = " << iEle << " : " << nEles << std::endl;
   if (
    (reader.Get4V("met")->at(0)).Et() > 20
    && reader.Get4V("electrons")->at(iEle).Pt() > 10 
    && reader.Get4V("electrons")->at(iEle).Pt() < 60
    && deltaPhi(reader.Get4V("electrons")->at(iEle).Phi(),(reader.Get4V("met")->at(0)).Phi()) > 0.75
    && (((reader.Get4V("met")->at(0)).Et() / reader.GetFloat("sumEt")->at(0)) > (-0.07 * (reader.Get4V("met")->at(0)).Et() + 3.5 ) 
    || ((reader.Get4V("met")->at(0)).Et() / reader.GetFloat("sumEt")->at(0)) > 0.4)
    )
    {
     std::cerr << "selected ..." << std::endl;
     pT = reader.Get4V("electrons")->at(iEle).Pt();   
     ET = (reader.GetFloat("electrons_scE")->at(iEle)) * sin(reader.Get4V("electrons")->at(iEle).Theta());
     EoP = reader.GetFloat("electrons_eOverP")->at(iEle);
     Eta = reader.Get4V("electrons")->at(iEle).Eta();
     SwissE4 = reader.GetFloat("SwissE4")->at(iEle);
     MaxEnergy = reader.GetFloat("MaxEnergy")->at(iEle);
     myTree.Fill();
    }
   }
 } //loop over the events 
 
 end = clock();
 std::cout <<"Time = " <<  ((double) (end - start)) << " (a.u.)" << std::endl;  

 myTree.Write();
 outFile.Write();
  
 return 0;
}
Esempio n. 10
0
void EffRapPbPb1S(){      // Change function name
        gROOT->Macro("logon.C+");

	TChain myTree("hionia/myTree");   // Change source of tree
        myTree.Add("/scratch_menkar/CMS_Trees/OniaTrees_2015_5TeV/PbPb_MC_Official/OniaTree_Pythia8_Ups1SMM_ptUps_00_03_Hydjet_MB_HINPbPbWinter16DR-75X_mcRun2_HeavyIon_v13-v1.root");   //  Change tree being added (Different for pp1S, pp2S, PbPb1S, PbPb2S)
        myTree.Add("/scratch_menkar/CMS_Trees/OniaTrees_2015_5TeV/PbPb_MC_Official/OniaTree_Pythia8_Ups1SMM_ptUps_03_06_Hydjet_MB_HINPbPbWinter16DR-75X_mcRun2_HeavyIon_v13-v1.root");
        myTree.Add("/scratch_menkar/CMS_Trees/OniaTrees_2015_5TeV/PbPb_MC_Official/OniaTree_Pythia8_Ups1SMM_ptUps_06_09_Hydjet_MB_HINPbPbWinter16DR-75X_mcRun2_HeavyIon_v13-v1.root");
        myTree.Add("/scratch_menkar/CMS_Trees/OniaTrees_2015_5TeV/PbPb_MC_Official/OniaTree_Pythia8_Ups1SMM_ptUps_09_12_Hydjet_MB_HINPbPbWinter16DR-75X_mcRun2_HeavyIon_v13-v1.root");
        myTree.Add("/scratch_menkar/CMS_Trees/OniaTrees_2015_5TeV/PbPb_MC_Official/OniaTree_Pythia8_Ups1SMM_ptUps_12_15_Hydjet_MB_HINPbPbWinter16DR-75X_mcRun2_HeavyIon_v13-v1.root");
        myTree.Add("/scratch_menkar/CMS_Trees/OniaTrees_2015_5TeV/PbPb_MC_Official/OniaTree_Pythia8_Ups1SMM_ptUps_15_30_Hydjet_MB_HINPbPbWinter16DR-75X_mcRun2_HeavyIon_v13-v1.root");

	Float_t         muMiDxy;
	Float_t         muMiDz;
	Int_t           muMiNPxlLayers;
	Int_t           muMiNTrkLayers;
	Bool_t          muMiGoodMu;
	Float_t         muPlDxy;
	Float_t         muPlDz;
	Int_t           muPlNPxlLayers;
	Int_t           muPlNTrkLayers;
	Bool_t          muPlGoodMu;
	Float_t         vProb;

	double          ptWeight; 
        double          ptWeightArr[6]={3.10497,4.11498,2.2579,1.2591,0.567094,0.783399};
	double          centWeight;
        double          RapBin[nRapBin] = {0.6,1.8};   //  RapBin
        double          RapBinErr[nRapBin] = {0.6,0.6};  // RapBinErr
        Float_t         RapBinEdges[nRapBin+1] = {0,1.2,2.4};
        double          ptReweight;

	Int_t           Centrality; 
	ULong64_t       HLTriggers;
	Int_t           Reco_QQ_size;
	Int_t           Reco_QQ_sign[36];   //[Reco_QQ_size]
	TClonesArray    *Reco_QQ_4mom;
	TClonesArray    *Reco_QQ_mupl_4mom;
	TClonesArray    *Reco_QQ_mumi_4mom;
	ULong64_t       Reco_QQ_trig[36];   //[Reco_QQ_size]
	Float_t         Reco_QQ_VtxProb[36];   //[Reco_QQ_size]
	Bool_t          Reco_QQ_mupl_isGoodMuon[36];   //[Reco_QQ_size]
	Bool_t          Reco_QQ_mumi_isGoodMuon[36];   //[Reco_QQ_size]
	Int_t           Reco_QQ_mupl_nPixWMea[36];   //[Reco_QQ_size]
	Int_t           Reco_QQ_mumi_nPixWMea[36];   //[Reco_QQ_size]
	Int_t           Reco_QQ_mupl_nTrkWMea[36];   //[Reco_QQ_size]
	Int_t           Reco_QQ_mumi_nTrkWMea[36];   //[Reco_QQ_size]
	Float_t         Reco_QQ_mupl_dxy[36];   //[Reco_QQ_size]
	Float_t         Reco_QQ_mumi_dxy[36];   //[Reco_QQ_size]
	Float_t         Reco_QQ_mupl_dz[36];   //[Reco_QQ_size]
	Float_t         Reco_QQ_mumi_dz[36];   //[Reco_QQ_size]



	Int_t           Gen_QQ_size;
	Int_t           Gen_QQ_sign[36];   //[Gen_QQ_size]
	TClonesArray    *Gen_QQ_4mom;
	TClonesArray    *Gen_QQ_mupl_4mom;
	TClonesArray    *Gen_QQ_mumi_4mom;
	Float_t         Gen_QQ_VtxProb[36];   //[Gen_QQ_size]
	Bool_t          Gen_QQ_mupl_isGoodMuon[36];   //[Gen_QQ_size]
	Bool_t          Gen_QQ_mumi_isGoodMuon[36];   //[Gen_QQ_size]
	Int_t           Gen_QQ_mupl_nPixWMea[36];   //[Gen_QQ_size]
	Int_t           Gen_QQ_mumi_nPixWMea[36];   //[Gen_QQ_size]
	Int_t           Gen_QQ_mupl_nTrkWMea[36];   //[Gen_QQ_size]
	Int_t           Gen_QQ_mumi_nTrkWMea[36];   //[Gen_QQ_size]
	Float_t         Gen_QQ_mupl_dxy[36];   //[Gen_QQ_size]
	Float_t         Gen_QQ_mumi_dxy[36];   //[Gen_QQ_size]
	Float_t         Gen_QQ_mupl_dz[36];   //[Gen_QQ_size]
	Float_t         Gen_QQ_mumi_dz[36];   //[Gen_QQ_size]





	TBranch        *b_Centrality;   //!
	TBranch        *b_HLTriggers;   //!
	TBranch        *b_Reco_QQ_size;   //!
	TBranch        *b_Reco_QQ_sign;   //!
	TBranch        *b_Reco_QQ_4mom;   //!
	TBranch        *b_Reco_QQ_mupl_4mom;   //!
	TBranch        *b_Reco_QQ_mumi_4mom;   //!
	TBranch        *b_Reco_QQ_trig;   //!
	TBranch        *b_Reco_QQ_VtxProb;   //!
	TBranch        *b_Reco_QQ_mupl_isGoodMuon;   //!
	TBranch        *b_Reco_QQ_mumi_isGoodMuon;   //!
	TBranch        *b_Reco_QQ_mupl_nPixWMea;   //!
	TBranch        *b_Reco_QQ_mumi_nPixWMea;   //!
	TBranch        *b_Reco_QQ_mupl_nTrkWMea;   //!
	TBranch        *b_Reco_QQ_mumi_nTrkWMea;   //!
	TBranch        *b_Reco_QQ_mupl_dxy;   //!
	TBranch        *b_Reco_QQ_mumi_dxy;   //!
	TBranch        *b_Reco_QQ_mupl_dz;   //!
	TBranch        *b_Reco_QQ_mumi_dz;   //!


	TBranch        *b_Gen_QQ_size;   //
	TBranch        *b_Gen_QQ_4mom;   //!
	TBranch        *b_Gen_QQ_mupl_4mom;   //!
	TBranch        *b_Gen_QQ_mumi_4mom;   //!


	//Set object pointer, Initialize
	Reco_QQ_4mom = 0;
	Reco_QQ_mupl_4mom = 0;
	Reco_QQ_mumi_4mom = 0;	
	
	Gen_QQ_4mom = 0;
	Gen_QQ_mupl_4mom = 0;
	Gen_QQ_mumi_4mom = 0;	


	myTree.SetBranchAddress("Centrality", &Centrality, &b_Centrality);
	myTree.SetBranchAddress("HLTriggers", &HLTriggers, &b_HLTriggers);
	myTree.SetBranchAddress("Reco_QQ_size", &Reco_QQ_size, &b_Reco_QQ_size);
	myTree.SetBranchAddress("Reco_QQ_sign", Reco_QQ_sign, &b_Reco_QQ_sign);
	myTree.SetBranchAddress("Reco_QQ_4mom", &Reco_QQ_4mom, &b_Reco_QQ_4mom);
	myTree.SetBranchAddress("Reco_QQ_mupl_4mom", &Reco_QQ_mupl_4mom, &b_Reco_QQ_mupl_4mom);
	myTree.SetBranchAddress("Reco_QQ_mumi_4mom", &Reco_QQ_mumi_4mom, &b_Reco_QQ_mumi_4mom);
	myTree.SetBranchAddress("Reco_QQ_trig", Reco_QQ_trig, &b_Reco_QQ_trig);
	myTree.SetBranchAddress("Reco_QQ_VtxProb", Reco_QQ_VtxProb, &b_Reco_QQ_VtxProb);
	myTree.SetBranchAddress("Reco_QQ_mupl_isGoodMuon", Reco_QQ_mupl_isGoodMuon, &b_Reco_QQ_mupl_isGoodMuon);
	myTree.SetBranchAddress("Reco_QQ_mumi_isGoodMuon", Reco_QQ_mumi_isGoodMuon, &b_Reco_QQ_mumi_isGoodMuon);
	myTree.SetBranchAddress("Reco_QQ_mupl_nPixWMea", Reco_QQ_mupl_nPixWMea, &b_Reco_QQ_mupl_nPixWMea);
	myTree.SetBranchAddress("Reco_QQ_mumi_nPixWMea", Reco_QQ_mumi_nPixWMea, &b_Reco_QQ_mumi_nPixWMea);
	myTree.SetBranchAddress("Reco_QQ_mupl_nTrkWMea", Reco_QQ_mupl_nTrkWMea, &b_Reco_QQ_mupl_nTrkWMea);
	myTree.SetBranchAddress("Reco_QQ_mumi_nTrkWMea", Reco_QQ_mumi_nTrkWMea, &b_Reco_QQ_mumi_nTrkWMea);
	myTree.SetBranchAddress("Reco_QQ_mupl_dxy", Reco_QQ_mupl_dxy, &b_Reco_QQ_mupl_dxy);
	myTree.SetBranchAddress("Reco_QQ_mumi_dxy", Reco_QQ_mumi_dxy, &b_Reco_QQ_mumi_dxy);
	myTree.SetBranchAddress("Reco_QQ_mupl_dz", Reco_QQ_mupl_dz, &b_Reco_QQ_mupl_dz);
	myTree.SetBranchAddress("Reco_QQ_mumi_dz", Reco_QQ_mumi_dz, &b_Reco_QQ_mumi_dz);



	myTree.SetBranchAddress("Gen_QQ_size", &Gen_QQ_size, &b_Gen_QQ_size);
	myTree.SetBranchAddress("Gen_QQ_4mom", &Gen_QQ_4mom, &b_Gen_QQ_4mom);
	myTree.SetBranchAddress("Gen_QQ_mupl_4mom", &Gen_QQ_mupl_4mom, &b_Gen_QQ_mupl_4mom);
	myTree.SetBranchAddress("Gen_QQ_mumi_4mom", &Gen_QQ_mumi_4mom, &b_Gen_QQ_mumi_4mom);


	TH1D  *RecoEvents=new TH1D("RecoEvents","Reconstructed", nRapBin, RapBinEdges);

        TH1D  *GenEvents=new TH1D("GenEvents","Generated", nRapBin, RapBinEdges);

        RecoEvents->Sumw2();
        GenEvents->Sumw2();

//        TH1D* hEff = new TH1D("Eff", "", nRapBin, RapBinEdges);

        TFile* ReweightFunctions = new TFile("dNdpT_root5.root", "Open");
        ReweightFunctions->GetObject("AA1S", AA1S);
        ReweightFunctions->GetObject("AA1Smc", AA1Smc);


	Long64_t nentries = myTree.GetEntries();
	cout << nentries<<endl;

	for (Long64_t jentry=0; jentry<nentries; jentry++){
		myTree.GetEntry(jentry);

		//looping over all the dimuons 
		for (int iQQ=0; iQQ<Reco_QQ_size;iQQ++){
			TLorentzVector *qq4mom = (TLorentzVector*) Reco_QQ_4mom->At(iQQ);
			TLorentzVector *mumi4mom = (TLorentzVector*) Reco_QQ_mumi_4mom->At(iQQ);
			TLorentzVector *mupl4mom = (TLorentzVector*) Reco_QQ_mupl_4mom->At(iQQ);

			//--Muid cuts for muon minus
			muMiDxy=Reco_QQ_mumi_dxy[iQQ];
			muMiDz=Reco_QQ_mumi_dz[iQQ];
			muMiNPxlLayers=Reco_QQ_mumi_nPixWMea[iQQ];
			muMiNTrkLayers=Reco_QQ_mumi_nTrkWMea[iQQ];
			muMiGoodMu = Reco_QQ_mumi_isGoodMuon[iQQ];

			//--Muid cuts for muon plus
			muPlDxy=Reco_QQ_mupl_dxy[iQQ];
			muPlDz=Reco_QQ_mupl_dz[iQQ];
			muPlNPxlLayers=Reco_QQ_mupl_nPixWMea[iQQ];
			muPlNTrkLayers=Reco_QQ_mupl_nTrkWMea[iQQ];
			muPlGoodMu = Reco_QQ_mupl_isGoodMuon[iQQ];
			vProb = Reco_QQ_VtxProb[iQQ];

			bool mupl_cut = 0;
			bool mumi_cut = 0;
			bool acceptMu = 0;
			bool trigL1Dmu = 0;
			bool PtCutPass = 0;
			bool MassCutPass = 0;

			//--Muon id cuts
			if( (muPlGoodMu==1) && muPlNTrkLayers> 5 &&  muPlNPxlLayers > 0 && TMath::Abs(muPlDxy) < 0.3 && TMath::Abs(muPlDz) < 20 && vProb > 0.01){mupl_cut = 1;}    
			if( (muMiGoodMu==1) && muMiNTrkLayers> 5 &&  muMiNPxlLayers > 0 && TMath::Abs(muMiDxy) < 0.3 && TMath::Abs(muMiDz) < 20 ){mumi_cut = 1;}

			//check if muons are in acceptance
			if(IsAccept(mupl4mom) && IsAccept(mumi4mom)){acceptMu = 1;}
			if (PtCut(mupl4mom) && PtCut(mumi4mom)){ PtCutPass = 1; }
			MassCutPass = MassCut(qq4mom, m1S_low, m1S_high);			

			//check if trigger bit is matched to dimuon
			if((HLTriggers&1)==1 && (Reco_QQ_trig[iQQ]&1)==1){trigL1Dmu = 1;}

			//weights only needed for PbPb
			 double weight = 0;
			 ptWeight=0;
			 centWeight = FindCenWeight(Centrality);
                         if(qq4mom->Pt()<=3){ptWeight = ptWeightArr[0];}
                         if(qq4mom->Pt()>3 && qq4mom->Pt()<=6){ptWeight = ptWeightArr[1];}
                         if(qq4mom->Pt()>6 && qq4mom->Pt()<=9){ptWeight = ptWeightArr[2];}
                         if(qq4mom->Pt()>9 && qq4mom->Pt()<=12){ptWeight = ptWeightArr[3];}
                         if(qq4mom->Pt()>12 && qq4mom->Pt()<=15){ptWeight = ptWeightArr[4];}
                         if(qq4mom->Pt()>15 && qq4mom->Pt()<=30){ptWeight = ptWeightArr[5];}
//                         if(qq4mom->Pt()<=30){ptReweight = PtReweight(qq4mom, PbPb1S_coefficient, PbPb1S_constant);}
                         if(qq4mom->Pt()<=30){ptReweight = (AA1S->Eval(qq4mom->Pt()))/(AA1Smc->Eval(qq4mom->Pt()));}
			 weight = centWeight*ptWeight*ptReweight;

			bool L1Pass=0;

			if (Reco_QQ_sign[iQQ]==0 && acceptMu && mupl_cut && mumi_cut && trigL1Dmu){L1Pass=1;}

                        if(qq4mom->Pt()<30 && Centrality < 160){
			for(int i = 0; i<nRapBin;i++){
				if(TMath::Abs(qq4mom->Rapidity())>(RapBin[i]-RapBinErr[i]) && TMath::Abs(qq4mom->Rapidity())<(RapBin[i]+RapBinErr[i])){
					if(L1Pass == 1 && PtCutPass ==1 && MassCutPass == 1){RecoEvents->Fill(TMath::Abs(qq4mom->Rapidity()),weight);}
				}

			}
// */
//			if(L1Pass == 1 && PtCutPass ==1 && MassCutPass == 1){RecoEvents->Fill(TMath::Abs(qq4mom->Rapidity()),weight);}
			}
	}


		//Dinonminator loop
		for (int iQQ=0; iQQ<Gen_QQ_size;iQQ++){
			TLorentzVector *qq4mom = (TLorentzVector*) Gen_QQ_4mom->At(iQQ);
			TLorentzVector *mumi4mom = (TLorentzVector*) Gen_QQ_mumi_4mom->At(iQQ);
			TLorentzVector *mupl4mom = (TLorentzVector*) Gen_QQ_mupl_4mom->At(iQQ);

			//--Muid cuts for muon minus
			 muMiDxy=Gen_QQ_mumi_dxy[iQQ];
			 muMiDz=Gen_QQ_mumi_dz[iQQ];
			 muMiNPxlLayers=Gen_QQ_mumi_nPixWMea[iQQ];
			 muMiNTrkLayers=Gen_QQ_mumi_nTrkWMea[iQQ];
			 muMiGoodMu = Gen_QQ_mumi_isGoodMuon[iQQ];

			//--Muid cuts for muon plus
			 muPlDxy=Gen_QQ_mupl_dxy[iQQ];
			 muPlDz=Gen_QQ_mupl_dz[iQQ];
			 muPlNPxlLayers=Gen_QQ_mupl_nPixWMea[iQQ];
			 muPlNTrkLayers=Gen_QQ_mupl_nTrkWMea[iQQ];
			 muPlGoodMu = Gen_QQ_mupl_isGoodMuon[iQQ];
			 vProb = Gen_QQ_VtxProb[iQQ];

			bool mupl_cut = 0;
			bool mumi_cut = 0;
			bool acceptMu = 0;
			bool trigL1Dmu = 0;
//			bool trigL3Dmu = 0;
			bool PtCutPass = 0;
			bool MassCutPass = 0;


			//--Muon id cuts
			if( (muPlGoodMu==1) && muPlNTrkLayers> 5 &&  muPlNPxlLayers > 0 && TMath::Abs(muPlDxy) < 0.3 && TMath::Abs(muPlDz) < 20 && vProb > 0.01){mupl_cut = 1;}
			if( (muMiGoodMu==1) && muMiNTrkLayers> 5 &&  muMiNPxlLayers > 0 && TMath::Abs(muMiDxy) < 0.3 && TMath::Abs(muMiDz) < 20 ){mumi_cut = 1;}

			//check if muons are in acceptance
			if(IsAccept(mupl4mom) && IsAccept(mumi4mom)){acceptMu = 1;}
			if (PtCut(mupl4mom) && PtCut(mumi4mom)){ PtCutPass = 1; }
			MassCutPass = MassCut(qq4mom, m1S_low, m1S_high);


			//check if trigger bit is matched to dimuon
//			if((HLTriggers&1)==1){trigL1Dmu = 1;}
//			if((HLTriggers&262144)==262144 && (Gen_QQ_trig[iQQ]&262144)==262144){trigL3Dmu = 1;}

			//weights only needed for PbPb
			 double weight = 0;
			 ptWeight=0;
                         centWeight = FindCenWeight(Centrality);
                         if(qq4mom->Pt()<=3){ptWeight = ptWeightArr[0];}
                         if(qq4mom->Pt()>3 && qq4mom->Pt()<=6){ptWeight = ptWeightArr[1];}
                         if(qq4mom->Pt()>6 && qq4mom->Pt()<=9){ptWeight = ptWeightArr[2];}
                         if(qq4mom->Pt()>9 && qq4mom->Pt()<=12){ptWeight = ptWeightArr[3];}
                         if(qq4mom->Pt()>12 && qq4mom->Pt()<=15){ptWeight = ptWeightArr[4];}
                         if(qq4mom->Pt()>15 && qq4mom->Pt()<=30){ptWeight = ptWeightArr[5];}			 
//			 if(qq4mom->Pt()<=30){ptReweight = PtReweight(qq4mom, PbPb1S_coefficient, PbPb1S_constant);}
                         if(qq4mom->Pt()<=30){ptReweight = (AA1S->Eval(qq4mom->Pt()))/(AA1Smc->Eval(qq4mom->Pt()));}
                         weight = centWeight*ptWeight*ptReweight;

//			bool L1Pass=0;
//			bool L3Pass=0;
//			if (acceptMu){L1Pass=1;}
//			if (acceptMu){L3Pass=1;}

                        if(qq4mom->Pt()<30 && Centrality < 160){
			for(int i = 0; i<nRapBin;i++){
				if(TMath::Abs(qq4mom->Rapidity())>(RapBin[i]-RapBinErr[i]) && TMath::Abs(qq4mom->Rapidity())<(RapBin[i]+RapBinErr[i])){
					if(acceptMu == 1 && PtCutPass == 1 && MassCutPass == 1){GenEvents->Fill(TMath::Abs(qq4mom->Rapidity()), weight);}
				}
			}
// */
//			if(acceptMu == 1 && PtCutPass == 1 && MassCutPass == 1){GenEvents->Fill(TMath::Abs(qq4mom->Rapidity()), weight);}
			}

		}


	}





TCanvas *c1 = new TCanvas("c1","c1",1000,680);


//From Ota

//     	 RecoEvents->Sumw2();
//         GenEvents->Sumw2();
//         hEff->Divide(RecoEvents, GenEvents);

//	TCanvas *c1 = new TCanvas("c1","c1",600,400);
	// Will use TGraphAsymmErrors
//	TGraphAsymmErrors *TrigEff = new TGraphAsymmErrors(hEff);
//	TGraphAsymmErrors *TrigEff = new TGraphAsymmErrors(nPtBin);
//	TrigEff->Divide(RecoEvents, GenEvents, "cl=0.683 b(1,1) mode");

//	TGraphErrors *TrigEff = new TGraphErrors(nPtBin,ptBin , Efficiency,ptBinErr , EfficiencyErr);

        TGraphAsymmErrors *TrigEff = new TGraphAsymmErrors(nRapBin);
        TrigEff->BayesDivide(RecoEvents, GenEvents);
        TrigEff->SetName("Eff");

	TrigEff->SetMarkerSize(2.0);
        TrigEff->SetMarkerColor(kBlue);
        TrigEff->SetMarkerStyle(21);
        TrigEff->SetLineColor(kBlue);

	TrigEff->SetTitle("");
//	TrigEff->SetMarkerStyle(21);
//	TrigEff->SetMarkerColor(2);
	TrigEff->GetYaxis()->SetTitle("Efficiency[#varUpsilon(1S)]_{PbPb}");
	TrigEff->GetXaxis()->SetTitle("|y|");
	TrigEff->GetYaxis()->SetRangeUser(0,1);
        TrigEff->GetXaxis()->SetRangeUser(0.0, 2.4);
        TrigEff->GetXaxis()->CenterTitle();
        TrigEff->GetYaxis()->CenterTitle();

	TrigEff->Draw("AP");	// */
	c1->Update();
	c1->SaveAs("EfficiencyVsRapidityUpsilonPbPb1S.png");

 TFile* MyFileEff;
          MyFileEff = new TFile("RapPbPbEff1S.root", "Recreate");
  TrigEff->Write();

  MyFileEff->Close();

        for (Int_t i = 0; i < (nRapBin); i++){
        cout << TrigEff->Eval(RapBin[i]) << " , - " << TrigEff->GetErrorYlow(i) << " , + " << TrigEff->GetErrorYhigh(i) << endl;
        }



        ReweightFunctions->Close();


}