Example #1
0
void test()
{

    TFile* fFakeFactorW  = TFile::Open("/afs/cern.ch/user/j/jsauvan/workspace/Projects/Htautau_Run2/Studies/FakeRate/ComputeFakeRates/plots/FakeFactors_Data_HighMT_2D/FakeFactors_Data_HighMT_2D.root");
    TFile* fFakeFactorQCD  = TFile::Open("/afs/cern.ch/user/j/jsauvan/workspace/Projects/Htautau_Run2/Studies/FakeRate/ComputeFakeRates/plots/FakeFactors_Data_QCDSS_2D/FakeFactors_Data_QCDSS_2D.root");
    TFile* fMtCorrection = TFile::Open("/afs/cern.ch/user/j/jsauvan/workspace/Projects/Htautau_Run2/Studies/FakeRate/ComputeMTCorrection/results/mtCorrections.root");
    TFile* fFractions    = TFile::Open("/afs/cern.ch/user/j/jsauvan/workspace/Projects/Htautau_Run2/Studies/FakeRate/ComputeBackgroundFractions/results/backgroundFraction_Iso_Medium_mvis_vs_mt.root");

    TH2F* fakeFactorW   = (TH2F*)fFakeFactorW->Get("FakeFactors_Data_HighMT_2D_Iso_Medium_InvertIso_Medium_tau_pt_vs_decayMode");
    TH2F* fakeFactorQCD = (TH2F*)fFakeFactorQCD->Get("FakeFactors_Data_QCDSS_2D_Iso_Medium_InvertIso_Medium_tau_pt_vs_decayMode");
    TGraph* mtCorrection = (TGraph*)fMtCorrection->Get("mt_correction");
    TH2F* fractionW = (TH2F*)fFractions->Get("h_backgroundFraction_Iso_Medium_mvis_vs_mt_W_Nom");
    TH2F* fractionQCD = (TH2F*)fFractions->Get("h_backgroundFraction_Iso_Medium_mvis_vs_mt_QCD_Nom");
    TH2F* fractionTT = (TH2F*)fFractions->Get("h_backgroundFraction_Iso_Medium_mvis_vs_mt_TT_Nom");
    TH2F* fractionVV = (TH2F*)fFractions->Get("h_backgroundFraction_Iso_Medium_mvis_vs_mt_VV_Nom");
    TH2F* fractionZJ = (TH2F*)fFractions->Get("h_backgroundFraction_Iso_Medium_mvis_vs_mt_ZJ_Nom");


    //wrappers
    WrapperTH2F* wFakeFactorW    = new WrapperTH2F(*fakeFactorW, "FF_W");
    WrapperTH2F* wFakeFactorQCD  = new WrapperTH2F(*fakeFactorQCD, "FF_QCD");
    WrapperTGraph* wMtCorrection = new WrapperTGraph(*mtCorrection, "MT_Corr");
    WrapperTH2F* wFractionW      = new WrapperTH2F(*fractionW, "f_W");
    WrapperTH2F* wFractionQCD    = new WrapperTH2F(*fractionQCD, "f_QCD");
    WrapperTH2F* wFractionTT     = new WrapperTH2F(*fractionTT, "f_TT");
    WrapperTH2F* wFractionVV     = new WrapperTH2F(*fractionVV, "f_VV");
    WrapperTH2F* wFractionZJ     = new WrapperTH2F(*fractionZJ, "f_ZJ");

    // formulas
    TFormula mtCorr("mtCorr", "x[0]*x[1]");
    WrapperTFormula* wFakeFactorWCorr = new WrapperTFormula(mtCorr, "FF_WCorr");

    TFormula combination("combination", "x[0]*x[2]+x[1]*(x[3]+x[4]+x[5]+x[6])");
    WrapperTFormula* wFakeFactorComb = new WrapperTFormula(combination, "FF_Comb");

    // fake factor
    // tau_pt = 0
    // tau_decay = 1
    // mt = 2
    // mvis = 3
    FakeFactor* factor = new FakeFactor();
    factor->addNode(wFakeFactorW, {}, {0,1});
    factor->addNode(wFakeFactorQCD, {}, {0,1});
    factor->addNode(wMtCorrection, {}, {2});
    factor->addNode(wFractionW, {}, {3,2});
    factor->addNode(wFractionQCD, {}, {3,2});
    factor->addNode(wFractionTT, {}, {3,2});
    factor->addNode(wFractionVV, {}, {3,2});
    factor->addNode(wFractionZJ, {}, {3,2});
    factor->addNode(wFakeFactorWCorr, {0,2}, {});
    factor->addNode(wFakeFactorComb, {1,8,4,3,5,6,7}, {});

    TFile* file = TFile::Open("test.root", "recreate");
    file->WriteObject(factor, "ff");
    file->Close();
    std::cout<<"Done\n";

}
Example #2
0
  /**
   * Generuje naprzemienną kombinację liniową, tj. P_0 - P_1 + P_2 - P_3...
   *
   * @param P ciąg wielomianów ortogonalnych do wygenerowania kombinacji
   */
  static combination alternate(const orthonomial &P) {
    sequence t(P.n + 1);

    for (uint i = 0; i <= P.n; i++) {
      t[i] = i % 2 == 0 ? 1 : -1;
    }

    return combination(P, t);
  }
Example #3
0
void combination(int n, int c, int combs[]){
    
    if(c == 0){
        int i;
        for(i=0; i<size; i++){
            printf("%d ",combs[i]);
        }
        printf("\n");
        return;
    }
    if(n==0)
        return;
    
    combs[c-1] = n;
    
    combination(n-1, c-1, combs);
    combination(n-1, c, combs);
}
Example #4
0
int main(void){
    int n;
    int i=1;
    scanf("%d" , &n);
    for(i=1;i<=n;i++){
        int arr[i];
        size = i;
        combination(n, i, arr);
    }
}
Example #5
0
void FPTree::test()
{
    ItemSet itemsetA;
    itemsetA.item.push_back("2");

    ItemSet itemsetB;
    itemsetB.item.push_back("1");
    itemsetB.item.push_back("3");
    combination(&itemsetA, &itemsetB, 1);
}
Example #6
0
 vector<vector<int> > combinationSum2(vector<int> &num, int target) 
 {
     vector<int> vecTmp;
     
     m_vecRet.clear();
     sort(num.begin(), num.end());
     combination(num, 0, vecTmp, target);
     
     return m_vecRet;
 }
Example #7
0
int main() {
	int t,h,i;
	for (scanf("%d",&t);t;t--) {
		scanf("%d%d",&n,&h);
		for (i=0;i<n;i++) hamming[i]='0';
		hamming[n]='\0';
		combination(0,h);
		if (t>1) puts("");
	}
}
Example #8
0
File: adlint.c Project: gembaf/wint
// フォーカードを狙う
int four_of_a_kind(Handcard hd[], Cards remain_card, Cards hand_card, Cards deck_card, int cg)
{
  int k1, k2;
  int reqire_num;
  int change_num = CHNG - cg;
  int min_num;
  int min_pos;
  int flag = 0; // 役が狙えるかどうかのフラグ
  double exp_num[13] = {0};
  double numerator, denominator;

  for ( k1 = 0; k1 < 13; k1++) {
    reqire_num = 4 - hand_card.num[k1];
    if ( deck_card.num[k1] < reqire_num || change_num < reqire_num ) { continue; }
    flag = 1;
    if ( deck_card.amount < change_num ) { 
      exp_num[k1] = 1; 
    } else {
      denominator = combination(deck_card.amount, change_num);
      numerator = combination(deck_card.amount - deck_card.num[k1], change_num - reqire_num);
      exp_num[k1] = numerator / denominator;
    }
  }

  // 手札に確率の反映
  for ( k1 = 0; k1 < HNUM; k1++ ) {
    hd[k1].exp[FOUR_OF_A_KIND] = (exp_num[hd[k1].num] * P7);
  }
  if ( flag ) {
    bubble_sort_role(hd, HNUM, FOUR_OF_A_KIND);
    min_num = remain_card.num[hd[0].num];
    min_pos = hd[0].pos;
    for ( k1 = 1; k1 < HNUM; k1++ ) {
      if ( remain_card.num[hd[k1].num] < min_num ) {
        min_num =  remain_card.num[hd[k1].num];
        min_pos = hd[k1].pos;
      }
    }
    return min_pos;
  }
  return -1;
}
 void combination(vector<int> &num, int beg, int target, vector<int> &tmp, vector<vector<int> > &ret) {
     if(target < 0) return;
     if(target == 0) {ret.push_back(tmp); return;}
     for(int i = beg; i < num.size();) {
         int t = num[i];
         tmp.push_back(t);
         combination(num, i+1, target - t, tmp, ret);
         tmp.pop_back();
         while(num[++i] == t && i < num.size());
     }
 }
Example #10
0
void FPTree::GenerateFrequentItemSets(FPNode* fpNode, ItemSet* itemSet, vector<FPItem*> fpItems)
{
    if(fpNode == NULL)
    {
        return;
    }
    // 单个路径
    if(fpNode -> childs != NULL && fpNode -> childs -> siblings == NULL)
    {
        ItemSet itemSetA;
        FPNode* child = fpNode -> childs;
        while(child != NULL)
        {
            itemSetA.item.push_back(child -> fpData -> data);
            if(itemSetA.support > child -> fpData -> support)
            {
                itemSetA.support = child -> fpData -> support;
            }
            child = child -> childs;
        }
        combination(&itemSetA, itemSet, (int)itemSetA.item.size());
    }
    else
        if(fpNode -> childs == NULL && itemSet -> item.size() >=2)
    {
        for(int i = 0; i < itemSet -> item.size(); i++)
        {
            cout << itemSet -> item[i] << " ";
        }
        cout << endl;
    }
    else
    {
        for(int i = (int)fpItems.size() - 1; i >= 0; i--)
        {
            ItemSet itemSetB;
            string data = fpItems[i] -> itemData;
            itemSetB.item.push_back(data);
            itemSetB.support = fpItems[i] -> support;
            if(itemSet != NULL)
            {
                for(int j = 0; j < itemSet -> item.size(); j++)
                {
                    itemSetB.item.push_back(itemSet -> item[j]);
                }
            }
            FPNode* root = NewNode("$", 0);
            vector<FPItem*> childFpItems;
            BuildConditionFPItems(fpItems[i], childFpItems);
            BuildConditionTree(fpItems[i], &root, childFpItems);
            GenerateFrequentItemSets(root, &itemSetB, childFpItems);
        }
    }
}
Example #11
0
int main() {
	scanf("%d", &n);
	while (n) {
		for (int i = 0; i < n; i++)
			scanf("%d", &input[i]);
		combination(0, 0, n, 6);
		scanf("%d", &n);
		if (n)
			printf("\n");
	}
}
 void combination(int k, int n, vector<int>& v, vector<vector<int>>& ret, int beg){
     if(k == 0 && n == 0){
         ret.push_back(v);
         return;
     }
     for(int i = beg; i < 10 && i <= n; i++){
         v.push_back(i);
         combination(k - 1, n - i, v, ret, i + 1);
         v.pop_back();
     }
 }
Example #13
0
 void combination(int n, int k, int start, vector<int> &path, vector<vector<int>> &result) {
     if (k == 0) {
         result.push_back(path);
         return;
     }
     for (int i = start; i <= n; ++i) {
         path.push_back(i);
         combination(n, k-1, i+1, path, result);
         path.pop_back();
     }
 } 
Example #14
0
 vector<vector<int>> combine(int n, int k) {
     
     vector<vector<int>> res;
     if(n<k || k<=0 || n<=0)
         return res;
     
     vector<int> p;
     combination(n,k,1,p,res);
     return res;
     
 }
int main()
{
	int j, k;
    printf("1\n1 1\n");
    for(j = 2; j <= 5; j++){
		for(k = 0; k <= j; k++){
			printf("%d ", combination(j, k));
		}
		printf("\n");
    }
    return 0;
}
Example #16
0
void Solution::combination(vector<vector<int> > &result, vector<int> sol, int k, int n)
{
	if (sol.size() == k && n == 0) { result.push_back(sol); return ; }
	if (sol.size() < k) {
		for (int i = sol.empty() ? 1 : sol.back() + 1; i <= 9; ++i) {
			if (n - i < 0) break;
			sol.push_back(i);
			combination(result, sol, k, n - i);
			sol.pop_back();
		}
	}
}
Example #17
0
 vector<vector<int> > combinationSum2(vector<int> &num, int target) {
     // Start typing your C/C++ solution below
     // DO NOT write int main() function
     vector<vector<int> > ret;
     if(num.empty())
         return ret;
     int n = num.size();
     sort(num.begin(),num.end());
     vector<int> vec(100);
     combination(ret,num,-1,n,target,vec,0,0);
     return ret;
 }
void iterateThroughDimensions(int level,
                              int dims_left,
                              SGNodes<Scalar,DIM> & cubPointsND,
                              Teuchos::Array<Scalar> & partial_node,
                              Scalar partial_weight)
{
  int l = level;
  int d = DIM;
  int add_on = d - dims_left;
  int start = dims_left > 1 ? 1 : (int)std::max(1, l);
  int end = l + add_on;

  for(int k_i = start; k_i <= end; k_i++)
  {
    /*******************
    **  Slow-Gauss
    ********************/
    int order1D = 2*k_i-1;

    /*******************
    **  Fast-Gauss
    ********************/
    //int order1D = (int)pow(2,k_i) - 1;

    int cubDegree1D = 2*order1D - 1;
    CubatureDirectLineGauss<Scalar> Cub1D(cubDegree1D);
    FieldContainer<Scalar> cubPoints1D(order1D, 1);
    FieldContainer<Scalar> cubWeights1D(order1D);

    Cub1D.getCubature(cubPoints1D, cubWeights1D);

    for(int node1D = 0; node1D < order1D; node1D++)
    {
      Teuchos::Array<Scalar> node(d-dims_left+1);
      node[d-dims_left] = cubPoints1D(node1D,0);
      for(int m = 0; m < d-dims_left; m++)
        node[m] = partial_node[m];

      Scalar weight = cubWeights1D(node1D)*partial_weight;

      if(dims_left != 1)
      {
        iterateThroughDimensions(l - k_i, dims_left-1, cubPointsND, node, weight);
      }
      else
      {
        weight = pow(-1.0, end - k_i)*combination(d-1, k_i - l)*weight;
        cubPointsND.addNode(&node[0], weight);
      }
    }
  }
}
    void AddAllCombinations(const vector<int>& S, size_t Length, vector<vector<int>>& Result)
    {
        vector<int> combination(Length, 0);
        vector<bool> selection(S.size(), false);
        for (size_t i = 0; i < Length; ++i)
        {
            selection[i] = true;
        }

        do
        {
            Result.push_back(GetSubset(S, selection));
        } while (NextSelection(selection));
    }
 vector<int> getRow(int rowIndex) 
 {
     vector<int> line = {1}; // first member.
     
     if(rowIndex == 0)
         return line;
         
     // add other members if rowIndex > 0.
     for(int i = 1; i < rowIndex; ++i) {
         line.push_back(combination(rowIndex, i));
     }
     line.push_back(1); // last member.
     
     return line;
 }
Example #21
0
int count(int n, int h) { 
    long long ret = 1;
    for (int p = 2; p <= n/p; ++p) { 
        int q = 0;
        while (n % p == 0) {
            ++q;
            n /= p;
        } 
        ret = ret * combination(h - 1 + q, q) % MOD;
    }
    if (n > 1) {
        ret = ret * h % MOD;
    } 
    return (int) ret;
}
void combination(string &tmp, int cur, string &digits)
{
    if (cur == digits.size()) {
        string elem = tmp;
        result.push_back(elem);
        //cout << elem << endl;
        return;
    }
    auto ret = PhoneMap.equal_range(digits[cur]);
    for (auto iter = ret.first; iter != ret.second; iter++) {
        tmp.push_back(iter->second);
        combination(tmp, cur + 1, digits);
        tmp.pop_back();
    }
}
Example #23
0
 void combination(vector<int>& nums, vector<int> path, int start, int k)
 {
     if (path.size() == k)
         res.push_back(path);
     int i = start;
     while (i < nums.size())
     {
         path.push_back(nums[i]);
         combination(nums, path, i + 1, k);
         path.pop_back();
         i++;
         while (i < nums.size() && nums[i] == nums[i-1])
             i++;
     }
 }
Example #24
0
int main() {
	int z = combination(0, 8);
	int a = combination(1, 8);
	int b = combination(2, 8);
	int c = combination(3, 8);
	int d = combination(4, 8);
	int h = combination(5, 8);
	int e = combination(6, 8);
	int f = combination(7, 8);
	int g = combination(8, 8);
	printf("%d\n", z);
	printf("%d\n", a);
	printf("%d\n", b);
	printf("%d\n", c);
	printf("%d\n", d);
	printf("%d\n", h);
	printf("%d\n", e);
	printf("%d\n", f);
	printf("%d\n", g);
	return 0;
}
int ways_rec(int n, int k)
{
	int res;

	/*end condition for ways_rec function*/	
	if(k>n)
		res=0;
	else 
	{
		printf("%d one stairs %d two stairs",n-k,k);
		res=combination(n,k);
		printf("=>%d different way \nOR\n",res);
		res+=ways_rec(n-1,k+1);
	}
	return res;
}
Example #26
0
 void combination(int n,int k,int index,vector<int>& p,vector<vector<int>>& res)
 {
     if(p.size()==k)
     {
         res.push_back(p);
         return;
     }
     
     for(int i=index; i<=n; i++)
     {
         p.push_back(i);
         combination(n,k,i+1,p,res);
         p.pop_back();
     }
     
     return;
 }
Example #27
0
int main(){
    int n;
    int *min, cur[20];
    int i, j;

    scanf("%d", &n);
    min = new int[1 << n]();
    for (i = 1, j = 0; j < n; j++, i <<= 1)
        scanf("%d", &min[i]);
    for (i = 1; i < n; i++){
        for (j = 0; j < n; j++)
            scanf("%d", &cur[j]);
        combination(min, cur, n, i+1, 0, 0, 0);
    }
    printf("%d\n", min[(1 << n) - 1]);
    delete[] min;
    return 0;
}
BitVector<dim> Subspace<dim>::representative
(const BitVector<dim>& v) const
{
    assert(v.size()==rank());

    // get projection to subspace expressed in d_basis
    BitVector<dim> pv = v;
    pv.slice(d_support);

    assert(pv.size()==dimension()); // |slice| set it to |d_support.count()|

    // expand that linear combination to an element of $(Z/2Z)^n$
    BitVector<dim> w = combination(d_basis,rank(),pv.data());

    assert(w.size()==rank());

    return v+w; // set |r| to original vector minus (or plus) correction |w|
}
Example #29
0
int *readBinary(int bits, int num, int *returnSize) {
    int n = combination(bits, num);
    int *ret = malloc(sizeof(int) * n);

    Ctx ctx, *p = &ctx;
    initCtx(p, bits, num);
    int *st = malloc(sizeof(int) * num);

    int i;
    for (i = 0; next(p); i++) {
        snapshot(p, st);
        ret[i] = buildFromBits(st, num);
    }

    *returnSize = n;
    free(st);
    finitCtx(p);
    return ret;
}
Example #30
0
void combination(int min[], int cur[], int n, int k, int idx, int i, int from){
    if (k == i){
        int j;
        int tmp = idx;
        bool check = false;
        for (j = 0; tmp; j++){
            if (tmp % 2){
                int value = min[idx - (1 << j)] + cur[j];
                if (!check || min[idx] > value){
                    min[idx] = value;
                    check = true;
                }
            }
            tmp /= 2;
        }
    }else{
        for (; from < n; from++)
            combination(min, cur, n, k, idx + (1 << from), i+1, from+1);
    }
}