예제 #1
0
void correlate(
    const char* infname = "/data_CMS/cms/yilmaz/HiForest_HYDJET_Track8_Jet21_STARTHI53_LV1_merged_forest_0.root",
    const char* outname = "histograms_01.root",
    bool MC = 1,
    bool PbPb = 1,
    double jetEtaMax = 1.6,
    int centIndex = 0, int etaBin = 0, int leadJetPtBin = 0, int trackPtBin = 0
) {

    cout<<"Begin"<<endl;

    bool mini = 1;

    int Nevents = 1000;

    bool usePF = 1;
    int R = 3;

    double etaCOM = -0.465;

    bool doFlow = 0;
    bool doInclusiveJets = 1;
    bool doTracks = 1;
    bool doGenParticles = 1;

    bool fillTracks = 0;

    if(mini) {
        fillTracks = 0;
        doTracks = 0;
    }

    double pi = TMath::Pi();

    double trkMin = 0.5;

    double leadPtMin = 120;
    double subleadPtMin = 50;
    double dphiMin = 2.*pi/3.;

    int frame = 1; // Dijet frame for z

    int analysisId = 0;

    double ptSubLeadMin = 30;
    double ptLeadMin = 120;

    double etLeadMin[10] = {100, 100,120,150,180,200  };
    double etLeadMax[10] = {1000,120,150,180,200,1000 };

    double tkMin[10] = {4.,  4.,5.,7.,10., 20.};
    double tkMax[10] = {100.,5.,7.,10.,20.,1000.};

    TF1* gaus = new TF1("gaus","gaus",-5,5);
    gaus->SetParameter(0,1);
    gaus->SetParameter(1,0);
    gaus->SetParameter(2,1);

    TRandom* engin = new TRandom();

    //  double fitMin[10] = {100,80,60,50,100};
    //  double fitMax[10] = {250,200,150,100,250};

    double fitMin[10] = {100,90,80,70,100};
    double fitMax[10] = {300,300,300,300,300};

    TH1::SetDefaultSumw2();
    TH2::SetDefaultSumw2();
    cout<<"x"<<endl;

    string name[10] = {"c0to10","c10to20","c20to30","c30to50","c50to100","c0to30","c30to100","c0to100"};
    cout<<"x"<<endl;

    TFile* outf = new TFile(outname,"recreate");

    TNtuple *nt;
    nt = new TNtuple("nt","nt","x");

    TH3D* hAxisLead = new TH3D("hAxisLead","",500,0,500,160,-1.6,1.6,200,-pi,pi);
    TH3D* hAxisSubLead = new TH3D("hAxisSubLead","",500,0,500,160,-1.6,1.6,200,-pi,pi);

    TH3D* hCorrLead = new TH3D("hCorrLead","",500,0,500,160,-1.6,1.6,200,-pi,pi);
    TH3D* hCorrSubLead = new TH3D("hCorrSubLead","",500,0,500,160,-1.6,1.6,200,-pi,pi);

    TH3D* hGenParticleLead = new TH3D("hGenParticleLead","",500,0,500,160,-1.6,1.6,200,-pi,pi);
    TH3D* hGenParticleSubLead = new TH3D("hGenParticleSubLead","",500,0,500,160,-1.6,1.6,200,-pi,pi);

    TH1D* hPtLead = new TH1D("hPtLead","",500,0,500);
    TH1D* hPtSubLead = new TH1D("hPtSubLead","",500,0,500);

    bool pp = 0;

    double ajMin[10] = {0,    0.11, 0.22, 0.33, 0. , 0, 0};
    double ajMax[10] = {0.11, 0.22, 0.33, 1.,   1. , 0 ,0};

    int nEta = 4;
    double etaMin[10] = {0,  0,    0.5,  1.};
    double etaMax[10] = {5., 0.5,  1.,   2.};

    outf->cd();

    int NxsiBin = 20;
    int NptBin = 100;
    double zBins[21];
    double ptBins[101];

    cout<<"BINS : "<<endl;
    for(int i = 0; i < NxsiBin+1; ++i) {
        double xsi = -1+(10./NxsiBin)*(NxsiBin-i-1);
        cout<<"xsi : "<<xsi<<endl;
        zBins[i] = exp(-xsi);
    }

    for(int i = 0; i < NptBin+1; ++i) {
        ptBins[i] = i*1000./NptBin;
    }

    HiForest * t;
    if(PbPb) {
        t = new HiForest(infname,"",cPbPb,MC);
    } else {
        t = new HiForest(infname,"",cPPb,MC);
    }

    t->hasPhotonTree *= 0;
    t->hasMetTree *= 0;
    t->hasPFTree *= 0;
    t->hasPFTree *= 0;


    t->hasAk2JetTree *= 0;
    t->hasAk3JetTree *= 1;
    t->hasAk4JetTree *= 0;
    t->hasAk5JetTree *= 1;

    t->hasAkPu2JetTree *= 0;
    t->hasAkPu3JetTree *= 1;
    t->hasAkPu4JetTree *= 0;
    t->hasAkPu5JetTree *= 1;

    t->hasAk2CaloJetTree *= 0;
    t->hasAk3CaloJetTree *= 1;
    t->hasAk4CaloJetTree *= 0;
    t->hasAk5CaloJetTree *= 1;

    t->hasAkPu2CaloJetTree *= 0;
    t->hasAkPu3CaloJetTree *= 1;
    t->hasAkPu4CaloJetTree *= 0;
    t->hasAkPu5CaloJetTree *= 1;

    t->hasTrackTree *= 1;
    t->hasPixTrackTree *= 0;
    t->hasTowerTree *= 0;
    t->hasHbheTree *= 0;
    t->hasEbTree *= 0;
    t->hasGenpTree *= 0;
    t->hasGenParticleTree *= MC;

    t->InitTree();

    cout<<"a"<<endl;


    if(Nevents > 0) {
        t->nEntries = Nevents;
    } else {
        Nevents = t->nEntries;
    }

    outf->cd();

    vector<JetIndex> vecs;
    vecs.reserve(maxEntry);

    float z1[4], z2[4],
          z1a[4], z2a[4],
          z1b[4], z2b[4],
          z1c[4], z2c[4];

    float tdt1[4], tdt2[4], tdt1a[4], tdt2a[4], tdt1b[4], tdt2b[4], tdt1c[4], tdt2c[4];

    Jets *jets0 = 0, * jets1 = 0, *jets2 = 0;
    TTree  *jetTree0 = 0, * jetTree1 = 0, *jetTree2 = 0;

    if(usePF) {
        if(R == 3) {
            jets1 = &(t->akPu3PF);
            jetTree1 = t->akPu3PFJetTree;
        }
        if(R == 5) {
            jets1 = &(t->akPu5PF);
            jetTree1 = t->akPu5PFJetTree;
        }
    } else {
        if(R == 3) {
            jets1 = &(t->akPu3Calo);
            jetTree1 = t->akPu3CaloJetTree;
        }
        if(R == 5) {
            jets1 = &(t->akPu5Calo);
            jetTree1 = t->akPu5CaloJetTree;
        }
    }

    cout<<"a"<<endl;

    for(int iev = 0; iev < Nevents; ++iev) {
        if(iev%1000==0) {
            cout<<"Processing entry : "<<iev<<endl;
        }
        t->GetEntry(iev);

        if(!MC && !PbPb && !(t->skim.pPAcollisionEventSelectionPA && t->skim.pHBHENoiseFilter)) continue;
        if(!MC && PbPb && !(t->skim.pcollisionEventSelection && t->skim.pHBHENoiseFilter)) continue;

        // add other selection

        int noise = -1;

        if(!MC && noise >= 2) continue;

        cout<<"passed event selection"<<endl;

        float pthat = jets1->pthat;

        double pt1 = -9, pt2 = -9, pt3 = -9, aj = -9,
               eta1 = -9,eta2 = -9,phi1 = -9,phi2 = -9,
               dphi  = -9, adphi  = -9,
               eta3 = -9, phi3 = -9, dr = -9,
               ch1 = 0,ch2 = 0, ch1alt = 0, ch2alt = 0,

               refpt1 = 0, refpt2 = 0, refpt3 = 0,
               genpt1 = 0, genpt2 = 0, genpt3 = 0,

               pu1=-9,pu2=-9, pu3 = -9,
               puc1=-9,puc2=-9, puc3 = -9,

               raw1=-9,raw2=-9, raw3 = -9,

               drm1=-9,drm2=-9, drm3=-9,
               psi1=-9, psi2=-9, psi=-9, psiP=-9, psiM=-9, psiPS=-9, psiMS=-9, psiS=-9,
               psiTri = -9, psiTriP = -9, psiTriM = -9, psiTriS = -9, psiTriPS = -9, psiTriMS = -9;

        float etsum=0,etx=0,ety=0,v2=0,
              etp=0,etxp=0,etyp=0,v2p=0,
              etm=0,etxm=0,etym=0,v2m=0,
              v2pm=0,v2mp=0,v2pp=0,v2mm=0,etx1=0,ety1=0,
              v2s,v2ps,v2ms;

        int dijetType = -9,njt10=0,njt20=0,njt30=0,njt40=0,njt50=0,njt100=0;
        int ngen10 = 0, ngen20=0, ngen30 = 0, ngen50 = 0;

        float trkMax1 = -9,trkMax2=-9,trkMax3=-9,
              trkSum1=-9,trkSum2=-9,trkSum3=-9,
              had1=-9,had2=-9,had3=-9,
              matchPt1=-9,matchPt2=-9,matchPt3=-9;

        int nSide = -9;

        int iPlane = 21; //21 HF, 0 tracks

        double flowEtaMin = 3;

        double hfp = t->evt.hiHFplusEta4;
        double hfm = t->evt.hiHFminusEta4;
        double zdc = t->evt.hiZDCplus;
        double vz = t->track.zVtx[t->track.maxVtx];

        double ntrk = t->evt.hiNtracks;
        double npix = t->evt.hiNpix;

        int nside = 0;
        int nps = 0;
        int npb = 0;
        int npscom = 0;
        int npbcom = 0;
        double hfs = 0, hfb = 0;
        int nls = 0, nlb = 0, nlscom = 0, nlbcom = 0;

        psi = t->evt.hiEvtPlanes[iPlane];
        psiM = t->evt.hiEvtPlanes[iPlane+2];
        psiP = t->evt.hiEvtPlanes[iPlane+1];

        v2 = 0;

        vecs.clear();

        for(int j = 0; j < jets1->nref; ++j) {
            if(jets1->rawpt[j] < 15) continue;

            if( fabs(jets1->jteta[j]) > jetEtaMax ) continue;

            JetIndex entry;
            entry.pt = jets1->jtpt[j];
            entry.index = j;
            vecs.push_back(entry);

            if(jets1->jtpt[j]>10) njt10++;
            if(jets1->jtpt[j]>20) njt20++;
            if(jets1->jtpt[j]>30) njt30++;
            if(jets1->jtpt[j]>40) njt40++;
            if(jets1->jtpt[j]>50) njt50++;
            if(jets1->jtpt[j]>100) njt100++;
        }

        sort(vecs.begin(),vecs.end(),comparePt);

        int jtLead = -1, jtSubLead = -1, jtThird = -1;

        if(vecs.size() > 0) jtLead = vecs[0].index;
        if(vecs.size() > 1) jtSubLead = vecs[1].index;
        if(vecs.size() > 2) jtThird = vecs[2].index;

        cout<<"Got some jets "<<vecs.size()<<endl;
        if(vecs.size() > 0) cout<<"pt1 : "<<jets1->jtpt[jtLead]<<endl;
        if(vecs.size() > 1) cout<<"pt2 : "<<jets1->jtpt[jtSubLead]<<endl;

        if(!MC && (vecs.size() < 1 || jets1->jtpt[jtLead] < leadPtMin)) continue;
        if(vecs.size() < 2 || jets1->jtpt[jtSubLead] < subleadPtMin) continue;
        if(fabs(deltaPhi(phi1,phi2)) < dphiMin) continue;

        cout<<"Got dijets"<<endl;

        int evt = t->hlt.Event;
        int run = t->hlt.Run;

        if(jtLead > -1) {
            pt1 = jets1->jtpt[jtLead];
            eta1 = jets1->jteta[jtLead];
            phi1 = jets1->jtphi[jtLead];
            raw1 = jets1->rawpt[jtLead];
            trkMax1 = jets1->trackMax[jtLead];
            trkSum1 = jets1->trackSum[jtLead];
            matchPt1 = jets1->matchedPt[jtLead];

            if(MC) refpt1 = jets1->refpt[jtLead];
        }

        if(jtSubLead > -1) {
            pt2 = jets1->jtpt[jtSubLead];
            eta2 = jets1->jteta[jtSubLead];
            phi2 = jets1->jtphi[jtSubLead];
            raw2 = jets1->rawpt[jtSubLead];
            trkMax2 = jets1->trackMax[jtSubLead];
            trkSum2 = jets1->trackSum[jtSubLead];
            matchPt2 = jets1->matchedPt[jtSubLead];

            if(MC) refpt2 = jets1->refpt[jtSubLead];

            aj = (pt1-pt2)/(pt1+pt2);
            dphi = deltaPhi(phi1,phi2);
            adphi = fabs(dphi);

            dr= deltaR(eta2,phi2,eta1,phi1);
            //       correlateTracks(t->track,eta2,phi2,trkMin,ch2,trk2,ntrk2);
        }

        if(jtThird > -1) {
            pt3 = jets1->jtpt[jtThird];
            eta3 = jets1->jteta[jtThird];
            phi3 = jets1->jtphi[jtThird];
            raw3 = jets1->rawpt[jtThird];
            trkMax3 = jets1->trackMax[jtThird];
            trkSum3 = jets1->trackSum[jtThird];
            matchPt3 = jets1->matchedPt[jtThird];

            if(MC) refpt3 = jets1->refpt[jtThird];

        }

        if(MC) {
            vecs.clear();
            for(int j = 0; j < jets1->ngen; ++j) {
                JetIndex entry;
                if(fabs(jets1->geneta[j]) > 2) continue;
                entry.pt = jets1->genpt[j];
                entry.index = j;
                vecs.push_back(entry);

                if(jets1->genpt[j] > 10)ngen10++;
                if(jets1->genpt[j] > 20)ngen20++;
                if(jets1->genpt[j] > 30)ngen30++;
                if(jets1->genpt[j] > 50)ngen50++;

            }

            sort(vecs.begin(),vecs.end(),comparePt);

            int ig1 = -1, ig2 = -1, ig3 = -1;
            if(vecs.size() > 0) {
                ig1 = jets1->genmatchindex[vecs[0].index];
                genpt1 = jets1->genpt[vecs[0].index];
            }
            if(vecs.size() > 1) {
                ig2 = jets1->genmatchindex[vecs[1].index];
                genpt2 = jets1->genpt[vecs[1].index];
            }
            if(vecs.size() > 2) {
                ig3 = jets1->genmatchindex[vecs[2].index];
                genpt3 = jets1->genpt[vecs[2].index];
            }

        }

        double dijetEta = (eta1+eta2)/2;

        cout<<"Filling jets"<<endl;

        double weight = 1;
        hPtLead->Fill(pt1,weight);
        hPtSubLead->Fill(pt2,weight);

        hAxisLead->Fill(pt1,eta1,phi1,weight);
        hAxisSubLead->Fill(pt2,eta2,phi2,weight);

        if(doGenParticles) {

            for(int i = 0; i < t->genparticle.mult; ++i) {
                if(t->genparticle.chg[i] == 0 || t->genparticle.sta[i] != 1) continue;
                double peta = t->genparticle.eta[i];
                double pphi = t->genparticle.phi[i];
                hGenParticleLead->Fill(pt1,deltaEta(peta,eta1),deltaPhi(pphi,phi1),weight);
                hGenParticleSubLead->Fill(pt2,deltaEta(peta,eta2),deltaPhi(pphi,phi2),weight);
            }
        }

        if(doTracks) {

            for(int i = 0; i < t->track.nTrk; ++i) {
                if(!t->selectTrack(i)) continue;
                if(t->track.trkPt[i] < trkMin) continue;
                double peta = t->track.trkEta[i];
                double pphi = t->track.trkPhi[i];
                hCorrLead->Fill(pt1,deltaEta(peta,eta1),deltaPhi(pphi,phi1),weight);
                hCorrSubLead->Fill(pt2,deltaEta(peta,eta2),deltaPhi(pphi,phi2),weight);

            }
        }

    }

    outf->Write();

    cout<<"Congrats!!!"<<endl;


}
예제 #2
0
void analyzeForest(
		   //		   const char* infname = "root://eoscms//eos/cms/store/group/phys_heavyions/velicanu/forest/PA2013_HiForest_PromptRecofirstPR_forestv51.root",
		   //		   const char* infname = "/d102/yetkin/prod/clean/noDuplicate.root",
		   const char* infname = "/d102/yjlee/hiForest2/promptskim-hihighpt-hltjet80-pt90-v20.root",
		   const char* outname = "ntuple_data_PbPb_akPu3PF_04.root",
		   bool MC = 0,
		   bool PbPb2011 = 1,
		   int centIndex = 0, int etaBin = 0, int leadJetPtBin = 0, int trackPtBin = 0
		   ){

   cout<<"Begin"<<endl;

   bool mini = 1;


   int Nevents = 50000;
   Nevents = -1;

  bool usePF = 1;
  int R = 3;

  double etaCOM = -0.465;



  bool doFlow = 0;
  bool doInclusiveJets = 1;
  bool doTracks = 1;
  bool fillTracks = !PbPb2011;

  if(mini){
    doTracks = 0;
  }


  double trkMin = 4;

  double leadPtMin = 100;
  double jetTrackMin = 4;


  int frame = 1; // Dijet frame for z

  int analysisId = 0;

  double ptSubLeadMin = 30;
  double ptLeadMin = 120;

  double etLeadMin[10] = {100, 100,120,150,180,200  };
  double etLeadMax[10] = {1000,120,150,180,200,1000 };

  double tkMin[10] = {4.,  4.,5.,7.,10., 20.};
  double tkMax[10] = {100.,5.,7.,10.,20.,1000.};

  TF1* gaus = new TF1("gaus","gaus",-5,5);
  gaus->SetParameter(0,1);
  gaus->SetParameter(1,0);
  gaus->SetParameter(2,1);

  TRandom* engin = new TRandom();

  //  double fitMin[10] = {100,80,60,50,100};
  //  double fitMax[10] = {250,200,150,100,250};

  double fitMin[10] = {100,90,80,70,100};
  double fitMax[10] = {300,300,300,300,300};

  TH1::SetDefaultSumw2();
  TH2::SetDefaultSumw2();
  cout<<"x"<<endl;

  string name[10] = {"c0to10","c10to20","c20to30","c30to50","c50to100","c0to30","c30to100","c0to100"};
  cout<<"x"<<endl;

  TFile* outf = new TFile(outname,"recreate");
  
  double pi = TMath::Pi();
  cout<<"x"<<endl;

  FlowReconstructor* flow;

  if(doFlow) flow = new FlowReconstructor();
  cout<<"x"<<endl;

  string trackVars = "";
  string evtVars = "";
  string dijetVars = "";
  string dijetExtraVars = "";

  string matchedVars = "";
  string jetVars = "";
  string flowVars = "";
  string flowVarsA = "";
  string flowVarsB = "";
  string flowVarsC = "";

  evtVars += "evt:run:bin:hf:ntrk:npix:psi:noise:pthat:nside:nps:npb:npscom:npbcom:hfs:hfb:nls:nlb:nlscom:nlbcom";
  dijetVars += "jtpt1:jteta1:jtphi1:jtpt2:jteta2:jtphi2:jtpt3:jteta3:jtphi3:dphi"
     ":trkMax1:trkMax2:trkMax3";

  dijetExtraVars += "njet10:njet20:njet30:njet40:njet50:njet100"
     ":ngen10:ngen20:ngen30:ngen50"
     ":trkSum1:trkSum2:trkSum3"
     ":pu1:pu2:pu3"
     ":puc1:puc2:puc3"
     ":raw1:raw2:raw3"
     ":had1:had2:had3"
     ":matchPt1:matchPt2:matchPt3";
  
  matchedVars += "refpt1:refpt2:refpt3:pt1:pt2:pt3:type";

  flowVars += "v2:v2s:psi:psis:v2p:v2ps:psip:psips:v2m:v2ms:psim:psims:v2pm:v2mp:v2pp:v2mm";

  jetVars += evtVars;
  jetVars += ":";
  jetVars += dijetVars;
  jetVars += ":";
  jetVars += "pt:eta:phi";

  if(MC){
     jetVars += ":";
     jetVars += "genpt:geneta:genphi:dijetType";
  }

  trackVars += evtVars;
  trackVars += ":";
  trackVars += dijetVars;
  trackVars += ":";

  trackVars += "pt:eta:phi:dr1:dr2:bkg1a:bkg1b:bkg1c:bkg2a:bkg2b:bkg2c";
  trackVars += ":";
  trackVars += "z1:z2:z1a:z2a:z1b:z2b:z1c:z2c";

  dijetVars += ":";
  dijetVars += dijetExtraVars;


  cout<<"Filling event variables : "<<evtVars.data()<<endl;
  cout<<"Filling dijet variables : "<<dijetVars.data()<<endl;
  cout<<"Filling mc variables    : "<<matchedVars.data()<<endl;
  cout<<"Filling jet variables   : "<<jetVars.data()<<endl;
  cout<<"Filling track variables : "<<trackVars.data()<<endl;


  TNtuple *ntjet,*ntdijet,*ntmatch,*ntevt,*ntFlowA,*ntFlowB,*ntFlowC,*nttrk;

  ntdijet = new TNtuple("ntdijet","",dijetVars.data());
  if(MC) ntmatch = new TNtuple("ntmatch","",matchedVars.data());
  ntevt = new TNtuple("ntevt","",evtVars.data());

  if(doFlow){
     ntFlowA = new TNtuple("ntFlowA","",flowVars.data());
  }

  if(doInclusiveJets){
     ntjet = new TNtuple("ntjet","",jetVars.data());
  }
  if(doTracks){
     nttrk = new TNtuple("nttrk","",trackVars.data());
  }

  bool pp = 0;

  double ajMin[10] = {0,    0.11, 0.22, 0.33, 0. , 0, 0};
  double ajMax[10] = {0.11, 0.22, 0.33, 1.,   1. , 0 ,0};

  int nEta = 4;
  double etaMin[10] = {0,  0,    0.5,  1.};
  double etaMax[10] = {5., 0.5,  1.,   2.};

   outf->cd();

   int NxsiBin = 20;
   int NptBin = 100;
   double zBins[21];
   double ptBins[101];

   cout<<"BINS : "<<endl;
   for(int i = 0; i < NxsiBin+1; ++i){
     double xsi = -1+(10./NxsiBin)*(NxsiBin-i-1);
     cout<<"xsi : "<<xsi<<endl;
     zBins[i] = exp(-xsi);
   }

   for(int i = 0; i < NptBin+1; ++i){
     ptBins[i] = i*1000./NptBin;
   }

   HiForest * t;
   if(PbPb2011){
      if(!MC) doTracks = 0;
     t = new HiForest(infname,"",cPbPb,MC);
   }else{
     t = new HiForest(infname,"",cPPb,MC);
   }

   t->hasPhotonTree *= 0;
   t->hasMetTree *= 0;
   t->hasPFTree *= 0;
   t->hasPFTree *= 0;


   t->hasAk2JetTree *= 0;
   t->hasAk3JetTree *= !PbPb2011 || MC;
   t->hasAk4JetTree *= 0;
   t->hasAk5JetTree *= !PbPb2011 || MC;

   t->hasAkPu2JetTree *= 0;
   t->hasAkPu3JetTree *= 1;
   t->hasAkPu4JetTree *= 0;
   t->hasAkPu5JetTree *= !PbPb2011 || MC;

   t->hasAk2CaloJetTree *= 0;
   t->hasAk3CaloJetTree *= !PbPb2011 || MC;
   t->hasAk4CaloJetTree *= 0;
   t->hasAk5CaloJetTree *= !PbPb2011 || MC;

   t->hasAkPu2CaloJetTree *= 0;
   t->hasAkPu3CaloJetTree *= !PbPb2011 || MC;
   t->hasAkPu4CaloJetTree *= 0;
   t->hasAkPu5CaloJetTree *= !PbPb2011 || MC;


   if(!doTracks) t->hasTrackTree *= 0;
   t->hasPixTrackTree *= 0;
   t->hasTowerTree *= 0;
   t->hasHbheTree *= 0;
   t->hasEbTree *= 0;
   t->hasGenpTree *= 0;
   t->hasGenParticleTree *= MC;

   t->InitTree();

   cout<<"a"<<endl;


   if(Nevents > 0){
      t->nEntries = Nevents;
   }else{
      Nevents = t->nEntries;
   }

   outf->cd();

   vector<JetIndex> vecs;
   vecs.reserve(maxEntry);

   float z1[4], z2[4],
     z1a[4], z2a[4],
     z1b[4], z2b[4],
     z1c[4], z2c[4];

   float tdt1[4], tdt2[4], tdt1a[4], tdt2a[4], tdt1b[4], tdt2b[4], tdt1c[4], tdt2c[4];

   Jets *jets0 = 0, * jets1 = 0, *jets2 = 0;
   TTree  *jetTree0 = 0, * jetTree1 = 0, *jetTree2 = 0;

   if(usePF){

     if(R == 3){
       jets1 = &(t->akPu3PF);
       jetTree1 = t->akPu3jetTree;
       jets2 = &(t->akPu3Calo);
       jets0 = &(t->ak3PF);


     }
     if(R == 5){
       jets1 = &(t->akPu5PF);
       jetTree1 = t->akPu5jetTree;
       jets2 = &(t->akPu5Calo);
       jets0 = &(t->ak5PF);

     }


   }else{

     if(R == 3){
       jets1 = &(t->akPu3PF);
       jetTree1 = t->akPu3jetTree;
       jets2 = &(t->ak3PF);
     }
     if(R == 5){
       jets1 = &(t->akPu5PF);
       jetTree1 = t->akPu5jetTree;
       jets2 = &(t->ak5PF);
     }
   }

   cout<<"a"<<endl;

   //   t->sortJets(jetTree1, *jets1, 2., 0, 1); // add smearing in here. save input as ref 

   for(int iev = 0; iev < Nevents; ++iev){
     if(iev%1000==0){ 
       cout<<"Processing entry : "<<iev<<endl;
       if(doFlow) flow->realloc();
     }
     t->GetEntry(iev);

     if(!MC && !PbPb2011 && !(t->skim.pPAcollisionEventSelectionPA && t->skim.pHBHENoiseFilter &&t->hlt.HLT_PAJet80_NoJetID_v1)) continue;
     if(!MC && PbPb2011 && !(t->skim.pcollisionEventSelection && t->skim.pHBHENoiseFilter)) continue;

     // add other selection

     int noise = -1;
     if(PbPb2011){

	 if(!(t->skim.pHBHENoiseFilter)) noise = 0;
	 
	 if(t->hcalNoise.maxhpdhits >= 17) noise = 1;
	 if(t->hcalNoise.maxrbxhits >= 56) noise = 2;
	 
	 if(t->hcalNoise.nspikenoise >= 1) noise = 4;
	 if(t->hcalNoise.hasbadts4ts5 >= 1) noise = 5;
    
       //       if(t->hcalNoise.maxzeros >= 17) noise = 2;
       //       if(t->hcalNoise.emenergy/t->hcalNoise.hadenergy <= 0.45) noise = 3;

     }else{
       if(0){
         if(t->hcalNoise.MaxHPDHits >= 17) noise = 1;
         if(t->hcalNoise.MaxRBXHits >= 56) noise = 2;

         if(t->hcalNoise.SpikeNoiseCount >= 1) noise = 4;
         if(t->hcalNoise.HasBadTS4TS5 >= 1) noise = 5;
       }

     }

     if(!MC && noise >= 0) continue;

     float pthat = jets1->pthat;

     double pt1 = -9, pt2 = -9, pt3 = -9, aj = -9,
       eta1 = -9,eta2 = -9,phi1 = -9,phi2 = -9,
       dphi  = -9, adphi  = -9,
       eta3 = -9, phi3 = -9, dr = -9,
       ch1 = 0,ch2 = 0, ch1alt = 0, ch2alt = 0,

	refpt1 = 0, refpt2 = 0, refpt3 = 0,
        genpt1 = 0, genpt2 = 0, genpt3 = 0,

       pu1=-9,pu2=-9, pu3 = -9, 
       puc1=-9,puc2=-9, puc3 = -9,

       raw1=-9,raw2=-9, raw3 = -9,

       drm1=-9,drm2=-9, drm3=-9,
       psi1=-9, psi2=-9, psi=-9, psiP=-9, psiM=-9, psiPS=-9, psiMS=-9, psiS=-9,
       psiTri = -9, psiTriP = -9, psiTriM = -9, psiTriS = -9, psiTriPS = -9, psiTriMS = -9;

     float etsum=0,etx=0,ety=0,v2=0,
       etp=0,etxp=0,etyp=0,v2p=0,
       etm=0,etxm=0,etym=0,v2m=0,
       v2pm=0,v2mp=0,v2pp=0,v2mm=0,etx1=0,ety1=0,
       v2s,v2ps,v2ms;

     int dijetType = -9,njt10=0,njt20=0,njt30=0,njt40=0,njt50=0,njt100=0;
     int ngen10 = 0, ngen20=0, ngen30 = 0, ngen50 = 0;


     float trkMax1 = -9,trkMax2=-9,trkMax3=-9,
       trkSum1=-9,trkSum2=-9,trkSum3=-9,
       had1=-9,had2=-9,had3=-9,
       matchPt1=-9,matchPt2=-9,matchPt3=-9;

     int nSide = -9;

     int iPlane = 21; //21 HF, 0 tracks

     double flowEtaMin = 3;

     double hf = t->evt.hiHFplusEta4;
     double ntrk = t->evt.hiNtracks;
     double npix = t->evt.hiNpix;

     int nside = 0;
     int nps = 0;
     int npb = 0;
     int npscom = 0;
     int npbcom = 0;
     double hfs = 0, hfb = 0;
     int nls = 0, nlb = 0, nlscom = 0, nlbcom = 0;

     psi = t->evt.hiEvtPlanes[iPlane];
     psiM = t->evt.hiEvtPlanes[iPlane+2];
     psiP = t->evt.hiEvtPlanes[iPlane+1];

     if(doFlow){
       flow->reset();

       flow->fillTowers(t->tower,psi,psiM,psiP);
       flow->fit(psi);

       v2 = flow->v2;
       v2p = flow->v2p;
       v2m = flow->v2m;
       v2pp = flow->v2pp;
       v2pm = flow->v2pm;
       v2mp = flow->v2mp;
       v2mm = flow->v2mm;
       psiS = flow->psiS;
       psiPS = flow->psiPS;
       psiMS = flow->psiMS;
       v2s = flow->v2s;
       v2ps = flow->v2ps;
       v2ms = flow->v2ms;
       
     }

     vecs.clear();

     for(int j = 0; j < jets1->nref; ++j){

       if( fabs(jets1->jteta[j]) > 2 ) continue;

       JetIndex entry;
       entry.pt = jets1->jtpt[j];
       entry.index = j;
       vecs.push_back(entry);
       if(jets1->trackMax[j]<jetTrackMin) continue;

       if(jets1->jtpt[j]>10) njt10++;
       if(jets1->jtpt[j]>20) njt20++;
       if(jets1->jtpt[j]>30) njt30++;
       if(jets1->jtpt[j]>40) njt40++;
       if(jets1->jtpt[j]>50) njt50++;
       if(jets1->jtpt[j]>100) njt100++;
     }

     sort(vecs.begin(),vecs.end(),comparePt);

     int jtLead = -1, jtSubLead = -1, jtThird = -1;

     if(vecs.size() > 0) jtLead = vecs[0].index;
     if(vecs.size() > 1) jtSubLead = vecs[1].index;
     if(vecs.size() > 2) jtThird = vecs[2].index;

     if(!MC && (vecs.size() < 1 || jets1->jtpt[jtLead] < leadPtMin)) continue;
          
     int evt = t->hlt.Event;
     int run = t->hlt.Run;

     if(jtLead > -1){
       pt1 = jets1->jtpt[jtLead];
       eta1 = jets1->jteta[jtLead];
       phi1 = jets1->jtphi[jtLead];
       raw1 = jets1->rawpt[jtLead];
       trkMax1 = jets1->trackMax[jtLead];
       trkSum1 = jets1->trackSum[jtLead];
       matchPt1 = jets1->matchedPt[jtLead];

       if(MC) refpt1 = jets1->refpt[jtLead];
     }

     if(jtSubLead > -1){
       pt2 = jets1->jtpt[jtSubLead];
       eta2 = jets1->jteta[jtSubLead];
       phi2 = jets1->jtphi[jtSubLead];
       raw2 = jets1->rawpt[jtSubLead];
       trkMax2 = jets1->trackMax[jtSubLead];
       trkSum2 = jets1->trackSum[jtSubLead];
       matchPt2 = jets1->matchedPt[jtSubLead];

       if(MC) refpt2 = jets1->refpt[jtSubLead];

       aj = (pt1-pt2)/(pt1+pt2);
       dphi = deltaPhi(phi1,phi2);
       adphi = fabs(dphi);

       dr= deltaR(eta2,phi2,eta1,phi1);
       //       correlateTracks(t->track,eta2,phi2,trkMin,ch2,trk2,ntrk2);
     }

     if(jtThird > -1){
	pt3 = jets1->jtpt[jtThird];
	eta3 = jets1->jteta[jtThird];
	phi3 = jets1->jtphi[jtThird];
	raw3 = jets1->rawpt[jtThird];
	trkMax3 = jets1->trackMax[jtThird];
        trkSum3 = jets1->trackSum[jtThird];
	matchPt3 = jets1->matchedPt[jtThird];

	if(MC) refpt3 = jets1->refpt[jtThird];

     }

     double dphijet=-10;
     dphijet=acos(cos(phi1-phi2));

     int im1 = findMatch(drm1,*jets0,eta1,phi1);
     int im2 = findMatch(drm2,*jets0,eta2,phi2);
     int im3 = findMatch(drm3,*jets0,eta3,phi3);

     if(im1 >= 0 ){
       pu1 = jets0->rawpt[im1]-raw1;
       puc1 = jets0->jtpt[im1]-pt1;
     }

     if(im2 >= 0 ){
       pu2 = jets0->rawpt[im2]-raw2;
       puc2 = jets0->jtpt[im2]-pt2;
     }

     if(im3 >= 0 ){
       pu3 = jets0->rawpt[im3]-raw3;
       puc3 = jets0->jtpt[im3]-pt3;
     }


     
     if(MC){
	vecs.clear();
	for(int j = 0; j < jets1->ngen; ++j){	   
	   JetIndex entry;
	   if(fabs(jets1->geneta[j]) > 2) continue;
	   entry.pt = jets1->genpt[j];
	   entry.index = j;
	   vecs.push_back(entry);

	   if(jets1->genpt[j] > 10)ngen10++;
           if(jets1->genpt[j] > 20)ngen20++;
           if(jets1->genpt[j] > 30)ngen30++;
           if(jets1->genpt[j] > 50)ngen50++;

	}

	sort(vecs.begin(),vecs.end(),comparePt);

	int ig1 = -1, ig2 = -1, ig3 = -1;     
	if(vecs.size() > 0){
	   ig1 = jets1->genmatchindex[vecs[0].index];
	   genpt1 = jets1->genpt[vecs[0].index];
	}
	if(vecs.size() > 1){
	   ig2 = jets1->genmatchindex[vecs[1].index];
	   genpt2 = jets1->genpt[vecs[1].index];
	}
	if(vecs.size() > 2){
	   ig3 = jets1->genmatchindex[vecs[2].index];
	   genpt3 = jets1->genpt[vecs[2].index];
	}

	if(jtLead == ig1 && jtSubLead == ig2) dijetType = 0;
        else if(jtLead == ig1 && jtSubLead == ig3) dijetType = 1;
        else if(jtLead == ig2 && jtSubLead == ig1) dijetType = 2;
        else if(jtLead == ig2 && jtSubLead == ig3) dijetType = 3;
        else if(jtLead == ig3 && jtSubLead == ig1) dijetType = 4;
        else if(jtLead == ig3 && jtSubLead == ig2) dijetType = 5;

     }

     double dijetEta = (eta1+eta2)/2;

     if(doTracks){
       
       for(int i = 0; i < t->genparticle.mult; ++i){
	 double peta = t->genparticle.eta[i];
         double petaCOM = peta - etaCOM;

         if(4. < peta && peta < 5.2){
	   if(t->genparticle.sube[i] == 0) hfs += t->genparticle.pt[i];
	   else hfb += t->genparticle.pt[i];
	 }


         if(fabs(peta) < 2.4){
	   if(t->genparticle.chg[i] == 0) continue;
	   if(t->genparticle.pt[i] > 0.4){
	     if(t->genparticle.sube[i] == 0) nps++;
	     else npb++;
	   }
	   if(t->genparticle.pt[i] > 0.1 && t->genparticle.pt[i] < 1){
             if(t->genparticle.sube[i] == 0) nls++;
             else nlb++;
           }


	 }
	 if(fabs(petaCOM) < 2.4){
	   if(t->genparticle.chg[i] == 0) continue;
	   if(t->genparticle.pt[i] > 0.4){
             if(t->genparticle.sube[i] == 0) npscom++;
             else npbcom++;
           }
	   if(t->genparticle.pt[i] > 0.1 && t->genparticle.pt[i] < 1){
             if(t->genparticle.sube[i] == 0) nlscom++;
             else nlbcom++;
           }
         }
       }
       

     for(int i = 0; i < t->track.nTrk; ++i){

       if(!t->selectTrack(i)) continue;

       double dphitrk = acos(cos(t->track.trkPhi[i]-phi1));
       if(dphitrk < 2.*pi/3. && dphitrk > pi/3.) nside++;

       double tdr1 = deltaR(t->track.trkEta[i],t->track.trkPhi[i],eta1,phi1);
       double tdr2 = deltaR(t->track.trkEta[i],t->track.trkPhi[i],eta2,phi2);

       double bkg1a = deltaR(t->track.trkEta[i],t->track.trkPhi[i],-eta1,phi1);
       double bkg1b = deltaR(t->track.trkEta[i],t->track.trkPhi[i],eta1,phi1+pi);
       double bkg1c = deltaR(t->track.trkEta[i],t->track.trkPhi[i],-eta1,phi1+pi);

       double bkg2a = deltaR(t->track.trkEta[i],t->track.trkPhi[i],-eta2,phi2);
       double bkg2b = deltaR(t->track.trkEta[i],t->track.trkPhi[i],eta2,phi2+pi);
       double bkg2c = deltaR(t->track.trkEta[i],t->track.trkPhi[i],-eta2,phi2+pi);

       double drMax = 10000.;

       if(tdr1 > drMax && 
	  tdr2 > drMax &&
	  bkg1a > drMax &&
	  bkg1b > drMax &&
	  bkg1c > drMax &&
	  bkg2a > drMax &&
	  bkg2b > drMax &&
	  bkg2c > drMax) continue;

       if(jtLead > -1){
	 getProjectedZ(z1,tdt1,pt1,eta1,phi1,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
	 getProjectedZ(z1a,tdt1a,pt1,-eta1,phi1,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
         getProjectedZ(z1b,tdt1b,pt1,eta1,phi1+pi,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
         getProjectedZ(z1c,tdt1c,pt1,-eta1,phi1+pi,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
       }

       if(jtSubLead > -1){
	 getProjectedZ(z2,tdt2,pt2,eta2,phi2,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
	 getProjectedZ(z2a,tdt2a,pt2,-eta2,phi2,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
         getProjectedZ(z2b,tdt2b,pt2,eta2,phi2+pi,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
         getProjectedZ(z2c,tdt2c,pt2,-eta2,phi2+pi,t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],dijetEta);
       }


       float trkentry[] = {
	 evt,run,t->evt.hiBin,hf,ntrk,npix,psi,noise,pthat,
	 nside,nps,npb,npscom,npbcom,hfs,hfb,nls,nlb,nlscom,nlbcom,
	  pt1,eta1,phi1,pt2,eta2,phi2,pt3,eta3,phi3,dphijet,
	 trkMax1,trkMax2,trkMax3,
	  t->track.trkPt[i],t->track.trkEta[i],t->track.trkPhi[i],
	  tdr1,tdr2,
	  bkg1a,bkg1b,bkg1c,bkg2a,bkg2b,bkg2c,
	  
	  z1[frame],z2[frame],
	  z1a[frame],z2a[frame],
	  z1b[frame],z2b[frame],
	  z1c[frame],z2c[frame],	  
       };
       
       if(fillTracks) nttrk->Fill(trkentry);

     }
     }
     
     float evtentry[] = {evt,run,t->evt.hiBin,hf,ntrk,npix,psi,noise,pthat,nside,nps,npb,npscom,npbcom,hfs,hfb,nls,nlb,nlscom,nlbcom};     
     float dijetentry[] = {pt1,eta1,phi1,pt2,eta2,phi2,pt3,eta3,phi3,dphijet,
                           trkMax1,trkMax2,trkMax3,
			   njt10,njt20,njt30,njt40,njt50,njt100,
			   ngen10,ngen20,ngen30,ngen50,
			   trkSum1,trkSum2,trkSum3,
			   pu1,pu2,pu3,
			   puc1,puc2,puc3,
			   raw1,raw2,raw3,
			   had1,had2,had3,
			   matchPt1,matchPt2,matchPt3
     };

     float matchedentry[] = {refpt1,refpt2,refpt3,genpt1,genpt2,genpt3,dijetType};
     float flowentryA[] = {v2,v2s,psi,psiS,v2p,v2ps,psiP,psiPS,v2m,v2ms,psiM,psiMS,v2pm,v2mp,v2pp,v2mm};

     ntevt->Fill(evtentry);
     ntdijet->Fill(dijetentry);
     if(MC) ntmatch->Fill(matchedentry);
     if(doFlow) ntFlowA->Fill(flowentryA);

     if(doInclusiveJets){
	vecs.clear();
	for(int j = 0; j < jets1->nref; ++j){
	   //       if(j == jtLead) continue;
	   if( fabs(jets1->jteta[j]) > 2 ) continue;
	   if( jets1->jtpt[j] < ptSubLeadMin) continue;
	   
	   JetIndex entry;
	   entry.pt = jets1->jtpt[j];
	   entry.index = j;
	   vecs.push_back(entry);
	}
	
	sort(vecs.begin(),vecs.end(),comparePt);

     for(int j = 0; j < vecs.size(); ++j){

       int jj = vecs[j].index;

       double pt=-9, eta=-9, phi=-9, had=-9, ch=-9, trk=-9, ntrk=-9, ptm=-9, drm=-9, pu=-9;
       double genpt=-9, geneta=-9, genphi=-9;

       pt = jets1->jtpt[jj];
       eta = jets1->jteta[jj];
       phi = jets1->jtphi[jj];

       genpt = jets1->refpt[jj];
       geneta = jets1->refeta[jj];
       genphi = jets1->refphi[jj];

       float jentry[] = {evt,run,t->evt.hiBin,hf,ntrk,npix,psi,noise,pthat,
			 nside,nps,npb,npscom,npbcom,hfs,hfb,nls,nlb,nlscom,nlbcom,
			 pt1,eta1,phi1,pt2,eta2,phi2,pt3,eta3,phi3,dphijet,
			 trkMax1,trkMax2,trkMax3,
			 pt,eta,phi,
			 genpt,geneta,genphi,dijetType 
       };

       ntjet->Fill(jentry);

     }
     } 

   }
   
   outf->Write();


   cout<<"Congrats!!!"<<endl;


}
예제 #3
0
파일: test.C 프로젝트: yenjie/pPbAna
void test(char * tag= "0", char *infName = "/d102/yjlee/hiForest2MC/Pythia80_HydjetDrum_mix01_HiForest2_v22_simTrack05.root")
{
   // Define the input file and HiForest
   HiForest *c = new HiForest(infName,"",cPPb);
   c->hasPFTree=0;
   c->hasPhotonTree=0;
   c->hasTowerTree=0;
   c->hasHbheTree=0;
   c->hasEbTree=0;
   c->hasGenpTree=0;
   c->hasGenParticleTree=0;   
   c->hasAkPu2CaloJetTree=0;
   c->hasAkPu3CaloJetTree=0;
   c->hasAkPu4CaloJetTree=0;
//   c->doTrackCorrections=1;
//   c->InitTree();
   
   // Output file
   TFile *output = new TFile(Form("output-%s.root",tag),"recreate");
   
   // Output
   TTree * t = new TTree("t","gammajet");
   
   JetData data(t,1);

   HistoData histos_MergedGeneralCalo("MergedGeneral");
   HistoData histos2_MergedGeneral("MergedGeneral2");   // phi dependent corr
   
   TH1D *hWeight = new TH1D("hWeight","",1000,0,100);
   TH1D *hWeight2 = new TH1D("hWeight2","",1000,0,100);
   TH1D *hPt = new TH1D("hPt","",100,0,100);
   TH1D *hNoWPt = new TH1D("hNoWPt","",100,0,100);


   TNtuple *nt = new TNtuple("nt","","m:eta:phi:pt:pt1:pt2:ch1:ch2:phi1:phi2:dxy1:dxy2:hiBin:N");
   TNtuple *ntEvt = new TNtuple("ntEvt","","N");
   nt->SetAutoFlush(30000);
   cout <<nt->GetAutoFlush()<<endl;
   TCanvas *cc = new TCanvas("cc","",600,600);   
//	 nt->SetCircular(1000);
   // Main loop

   TLorentzVector *v2 = new TLorentzVector;
   TLorentzVector *v = new TLorentzVector;
   TLorentzVector phi;

   for (int i=0;i<c->GetEntries()/1.;i++) {
      c->GetEntry(i);
      if (!c->selectEvent()) continue;
      if (i%1000==0){
         cout <<i<<" / "<<c->GetEntries()<<endl;
       } 
      int N=0;   
      for (int j=0;j<c->track.nTrk;j++) {
         if (!c->selectTrack(j)) continue;
         if (fabs(c->track.trkEta[j])>2.4) continue;
         if (fabs(c->track.trkPt[j])<0.4) continue;
         N++;
      }   
      ntEvt->Fill(N);
      for (int j=0;j<c->track.nTrk;j++) {
         if (!c->selectTrack(j)) continue;
         if (fabs(c->track.trkPt[j])<1) continue; 
//      if (fabs(c->track.trkDxy1[j]/c->track.trkDxyError1[j])<1) continue;
         for (int k=j+1;k<c->track.nTrk;k++) {
            if (j==k) continue;
            if (!c->selectTrack(k)) continue;
//            if (c->track.trkCharge[k]==c->track.trkCharge[j]) continue; 
     	    if (fabs(c->track.trkPt[k])<1) continue;
            v->SetPtEtaPhiM(c->track.trkPt[j],c->track.trkEta[j],c->track.trkPhi[j],0.493677);
            v2->SetPtEtaPhiM(c->track.trkPt[k],c->track.trkEta[k],c->track.trkPhi[k],0.493677);
//          v2->SetPtEtaPhiM(c->track.trkPt[k],c->track.trkEta[k],c->track.trkPhi[k],0.13957);
//          v->SetPtEtaPhiM(c->track.trkPt[j],c->track.trkEta[j],c->track.trkPhi[j],0.938272);
//          v->SetPtEtaPhiM(c->track.trkPt[j],c->track.trkEta[j],c->track.trkPhi[j],0.13957);
//          v2->SetPtEtaPhiM(c->track.trkPt[k],c->track.trkEta[k],c->track.trkPhi[k],0.13957);
  	    phi = (*v) + (*v2);
//         if ((phi.M())>5) {
            if ((phi.M())>1.2||phi.M()<0.0) {
//	       phi.Delete();
	       continue;
	    }    
	    nt->Fill(phi.M(),phi.Eta(),phi.Phi(),phi.Pt(),v->Pt(),v2->Pt(),c->track.trkCharge[j],c->track.trkCharge[k],v->Phi(),v2->Phi(),c->track.trkDxy1[j],c->track.trkDxy1[k],c->evt.hiBin,N);
//	       phi.Delete();
   }
      }

      //cout <<data.mpt<<endl;
      t->Fill();
   }
  // t->Write();
   histos_MergedGeneralCalo.calcEff();
   histos2_MergedGeneral.calcEff();
   output->Write();
   output->Close();
}