void makeTTree(){ // Declaring Double_t num; Double_t xNumBins, yNumBins; // Setting up Canvas to put plot the 2D histogram (from Tamii) and the 2 Bracnh Tree (created by this program) TCanvas *canvas = new TCanvas("canvas","Canvas"); canvas->Divide(2,1); canvas->cd(1); // Opening up histogram file from tamii's analyzer // Remember to do h2root before this program runs. TFile *f1 = new TFile("run6106_test44.root"); TH2F *hist2D = (TH2F*)f1->Get("h159"); // Plotting the 2D histogram on the first part of the Canvas hist2D->Draw("COLZ"); // Going through 2D hist and getting the total number of x and y bins. xNumBins = hist2D->GetNbinsX(); yNumBins = hist2D->GetNbinsY(); // Creating a new file to save the 2 branch tree to. TFile *t1 = new TFile("~/e329/root/13C/runs/run3014.root","recreate"); // This is the actual tree being created. // !!! For you YingYing, instead of x vs theta, you would have theta(fp or target) vs Yfp !!! TNtuple *DATA = new TNtuple("DATA","Xpos vs Theta","Xpos:Theta"); // This is the main nested for loop that goes through each bin in the 2D hist // takes the number of counts in that (x,y)bin and creates that many events // in the 2 branch tree for (int binx = 0; binx < xNumBins+2; binx++){ for (int biny = 0; biny < yNumBins+2; biny++){ //getting the number of events in a particular (x,y)bin num = hist2D->GetBinContent(binx,biny); double x = hist2D->GetXaxis()->GetBinCenter(binx); double y = hist2D->GetYaxis()->GetBinCenter(biny); //cout << num << " at x= " << x << ", y= " << y << endl; //Filling the Tree 'num' times with xbin and ybin events for (int i = 0; i < num; i++){ DATA->Fill(x,y); } } } //Saving the Tree that was just created and filled t1->Write(); //Ploting the Tree in the second part of the canvas. canvas->cd(2); DATA->Draw("Theta:Xpos>>(2000,-600,600,1000,-3,3)","","COLZ"); }
void jackknife( I_XMLConfigReader * xmlFile, MinimiserConfiguration * theMinimiser, FitFunctionConfiguration * theFunction, ParameterSet* argumentParameterSet, vector<string> CommandLineParam, int start, int stop ) { cout << "Starting JackKnife" << endl; PDFWithData * pdfAndData = xmlFile->GetPDFsAndData()[0]; ParameterSet * parSet = xmlFile->GetFitParameters( CommandLineParam ); PhaseSpaceBoundary * phase = xmlFile->GetPhaseSpaceBoundaries()[0]; pdfAndData->SetPhysicsParameters( parSet ); MemoryDataSet * dataset = (MemoryDataSet*) pdfAndData->GetDataSet(); vector<IDataSet*> data; data.push_back(dataset); IPDF * pdf = pdfAndData->GetPDF(); vector<IPDF*> vectorPDFs; vectorPDFs.push_back(pdf); // Repeat nominal fit to get the nominal value of the physics parameter FitResult * nominal = FitAssembler::DoFit( theMinimiser, theFunction, argumentParameterSet, vectorPDFs, data, xmlFile->GetConstraints() ); double nominal_value = nominal->GetResultParameterSet()->GetResultParameter("tau")->GetValue(); cout << nominal_value << endl; double jackknifed_value = 0.; MemoryDataSet * subset = new MemoryDataSet( phase ); int nData = dataset->Yield(); string fileName = ResultFormatter::GetOutputFolder(); fileName.append("/jackknife.root"); TFile * outputFile = new TFile("jackknife.root", "RECREATE"); TNtuple * jack = new TNtuple("jack", "jackknifed - nominal", "diff_jackknifed_nominal:reco_time:true_time"); double reco_time = 0.; double true_time = 0.; for ( int i = start; i < stop; i++ ) { for ( int j = 0; j < nData; j++ ) { if ( j == i ) { reco_time = dataset->GetDataPoint( j )->GetObservable( "time" )->GetValue(); true_time = dataset->GetDataPoint( j )->GetObservable( "truetime" )->GetValue(); continue; } subset->AddDataPoint( dataset->GetDataPoint( j ) ); } cout << "Creating subset " << i << " containing " << subset->Yield() << " candidates" << endl; vector<IDataSet*> vectorData; vectorData.push_back(subset); FitResult * result = FitAssembler::DoFit( theMinimiser, theFunction, argumentParameterSet, vectorPDFs, vectorData, xmlFile->GetConstraints() ); if ( result->GetFitStatus() == 3 ) { jackknifed_value = result->GetResultParameterSet()->GetResultParameter("tau")->GetValue(); jack->Fill( (Float_t)(jackknifed_value - nominal_value), (Float_t)reco_time, (Float_t)true_time); } subset->Clear(); delete result; } outputFile->Write(); outputFile->Close(); }
int execQuery() { TNtuple *ed = new TNtuple("ed","ed","pt:val:stat"); ed->SetScanField(0); ed->Fill(1.0, 5.0, 4.0); TSQLRow *row = ed->Query("pt:val:stat")->Next(); fprintf(stdout,"1: %s 2: %s 3: %s\n",row->GetField(0),row->GetField(1),row->GetField(2)); return 0; }
void decayang1() { gROOT->Reset(); float E, p, px, py, pz; float phi,cos_theta; const float PI=3.14159; const float mpi=0.13957018; const float mrho=0.77549; TLorentzVector P1, P2; TFile *f = new TFile("decayang.root","RECREATE"); TNtuple *cmspi = new TNtuple("cmspi","Pi decay to two photons in CMS","px1:py1:pz1:E1:px2:py2:pz2:E2"); TNtuple *cmsrho = new TNtuple("cmsrho","Rho decay to two pions in CMS","px1:py1:pz1:E1:px2:py2:pz2:E2"); TNtuple *boostpi = new TNtuple("boostpi","Pi decay to two photons in lab frames","b1px1:b1py1:b1pz1:b1e1:b1px2:b1py2:b1pz2:b1e2"); for (int i=0; i<10000; i++) { phi = 2.0 * PI *(gRandom->Rndm()); // generate phi cos_theta = 2.0 * (gRandom->Rndm())-1; //generate cos(theta) //Start with the pi to photon decays E=mpi/2.0; p=E; px=p*cos(phi)*sqrt(1.0-pow(cos_theta,2)); py=p*sin(phi)*sqrt(1.0-pow(cos_theta,2)); pz=p*cos_theta; cmspi->Fill(px, py, pz, E, -px, -py, -pz, E); //Now do the rho to pi decays E=mrho/2.0; p=sqrt(E*E-mpi*mpi); px = p * cos(phi) * sqrt( 1.0 - pow(cos_theta,2)); py = p * sin(phi) * sqrt( 1.0 - pow(cos_theta,2)); pz = p * cos_theta; cmsrho->Fill(px, py, pz, E, -px, -py, -pz, E); } f->Write(); }
void visit(const SmoothParticle &p) { size_t overlaps; //float directRho = dmf->getRho(particles[i].position, overlaps); //float r = particles[i].position.distanceTo(ComaPositionKpc); #if GADGET_ROOT_ENABLED ntuple->Fill(r, particles[i].rho, directRho, overlaps); #endif //out << r << " " << particles[i].rho << " " << directRho << " " // << overlaps << std::endl; }
void writeVolumeWeightedProfile() { std::cout << "** Write Volume Weighted Profile" << std::endl; const size_t steps = 50; const float rMin = 5; const float rMax = ComaRadiusKpc; const size_t nPoints = 10000; #if GADGET_ROOT_ENABLED TFile *file = new TFile("coma_profile_volume_weighted.root", "RECREATE", "Rho Weighted"); if (file->IsZombie()) throw std::runtime_error( "Root output file cannot be properly opened"); TNtuple *ntuple = new TNtuple("events", "Rho", "r:B"); #endif std::ofstream out("coma_profile_volume_weighted.csv"); out << "r B" << std::endl; float stepLog = (log10(rMax) - log10(rMin)) / (steps - 1); for (size_t i = 0; i < steps; i++) { std::cout << "."; std::cout.flush(); float r = pow(10, log10(rMin) + stepLog * i); float avgB = 0; for (size_t i = 0; i < nPoints; i++) { Vector3f p = randomUnitVector(); p *= r; p += ComaPositionKpc; Vector3f b; bool isGood = dmf->getField(p, b); avgB += b.length(); // / nPoints; } avgB /= nPoints; #if GADGET_ROOT_ENABLED ntuple->Fill(r, avgB); #endif out << r << " " << avgB << std::endl; } #if GADGET_ROOT_ENABLED file->Write(); file->Close(); #endif std::cout << std::endl; }
void parallelcoord() { TNtuple *nt = NULL; Double_t s1x, s1y, s1z; Double_t s2x, s2y, s2z; Double_t s3x, s3y, s3z; r = new TRandom();; new TCanvas("c1", "c1",0,0,800,700); gStyle->SetPalette(1); nt = new TNtuple("nt","Demo ntuple","x:y:z:u:v:w"); for (Int_t i=0; i<20000; i++) { r->Sphere(s1x, s1y, s1z, 0.1); r->Sphere(s2x, s2y, s2z, 0.2); r->Sphere(s3x, s3y, s3z, 0.05); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); generate_random(i); nt->Fill(s1x, s1y, s1z, s2x, s2y, s2z); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); generate_random(i); nt->Fill(s2x-1, s2y-1, s2z, s1x+.5, s1y+.5, s1z+.5); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); generate_random(i); nt->Fill(s1x+1, s1y+1, s1z+1, s3x-2, s3y-2, s3z-2); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); } nt->Draw("x:y:z:u:v:w","","para",5000); TParallelCoord* para = (TParallelCoord*)gPad->GetListOfPrimitives()->FindObject("ParaCoord"); para->SetDotsSpacing(5); TParallelCoordVar* firstaxis = (TParallelCoordVar*)para->GetVarList()->FindObject("x"); firstaxis->AddRange(new TParallelCoordRange(firstaxis,0.846018,1.158469)); para->AddSelection("violet"); para->GetCurrentSelection()->SetLineColor(kViolet); firstaxis->AddRange(new TParallelCoordRange(firstaxis,-0.169447,0.169042)); para->AddSelection("Orange"); para->GetCurrentSelection()->SetLineColor(kOrange+9); firstaxis->AddRange(new TParallelCoordRange(firstaxis,-1.263024,-0.755292)); }
void CheckDALIDet(char * ridffile="test.ridf"){ gSystem->Load("libanacore.so"); TArtEventStore *estore = new TArtEventStore(); estore->Open(ridffile); TArtRawEventObject *rawevent = estore->GetRawEventObject(); TFile *fout = new TFile("dataid.root","RECREATE"); TNtuple *ntp = new TNtuple("ntp","ntp","geo:ch:val"); int neve = 0; while(estore->GetNextEvent() && neve<100){ int eve_number=rawevent->GetEventNumber(); for(int i=0;i<rawevent->GetNumSeg();i++){ TArtRawSegmentObject *seg = rawevent->GetSegment(i); int device = seg->GetDevice(); int fp = seg->GetFP(); int detector = seg->GetDetector(); int module = seg->GetModule(); if(DALI==device&&DALIA==detector){ cout << " seg:"<< i <<" dev:"<< device << " fp:"<<fp<< " det:"<<detector<< " mod:"<<module << " #data=" << seg->GetNumData() << endl; for(int j=0;j<seg->GetNumData();j++){ TArtRawDataObject *d = seg->GetData(j); int geo = d->GetGeo(); int ch = d->GetCh(); unsigned int val = d->GetVal(); cout << " geo:" << geo << " ch:" << ch << " val:" << val << endl; ntp->Fill((float)geo,(float)ch,(float)val); } } } rawevent->Clear(); neve ++; } fout->Write(); fout->Close(); }
void RIDF2DataId(){ gSystem->Load("libanacore.so"); TArtEventStore *estore = new TArtEventStore(); estore->Open("test.ridf"); TArtRawEventObject *rawevent = estore->GetRawEventObject(); TFile *fout = new TFile("dataid.root","RECREATE"); TNtuple *ntp = new TNtuple("ntp","ntp","sys:cat:det:dtype:val"); int neve = 0; while(estore->GetNextEvent() && neve < 10000){ for(int i=0;i<rawevent->GetNumSeg();i++){ TArtRawSegmentObject *seg = rawevent->GetSegment(i); int device = seg->GetDevice(); int fp = seg->GetFP(); int detector = seg->GetDetector(); int module = seg->GetModule(); for(int j=0;j<seg->GetNumData();j++){ TArtRawDataObject *d = seg->GetData(j); int geo = d->GetGeo(); int ch = d->GetCh(); int val = d->GetVal(); int cat = d->GetCategoryID(); int det = d->GetDetectorID(); int id = d->GetDatatypeID(); ntp->Fill((float)detector,(float)cat,(float)det,(float)id,(float)val); } } estore->ClearData(); neve ++; } fout->Write(); fout->Close(); }
void ReadAsciiCreateRootFile(){ // Read data from an ascii file and create a root file with an histogram and an ntuple. // see a variant of this macro in basic2.C //Author: Rene Brun // read file basic.data //this file has 3 columns of float data TString dir = gSystem->UnixPathName(__FILE__); dir.ReplaceAll("ReadAsciiCreateRootFile.C",""); dir.ReplaceAll("/./","/"); ifstream in; in.open(Form("%sbasic.dat", dir.Data())); Float_t x,y,z; Int_t nlines = 0; TFile *f = new TFile("basic.root","RECREATE"); TH1F *h1= new TH1F("h1","x distribution", 100, -4,4); TNtuple *ntuple = new TNtuple("ntuple","data from ascii file","x:y:z"); while(1){ in >> x >> y >> z; //format of the data if (!in.good()) break; if(nlines<5) printf("x=%8f, y=%8f,z=%8f \n", x,y,z); h1->Fill(x); ntuple->Fill(x,y,z ); nlines++; } printf("found %d points \n", nlines); in.close(); f->Write(); }
TNtuple* LikelihoodSpace::get_contour(float delta) { TNtuple* contour = (TNtuple*) this->samples->Clone("lscontour"); contour->Reset(); // Get list of branch names std::vector<std::string> names; for (int i=0; i<this->samples->GetListOfBranches()->GetEntries(); i++) { std::string name = this->samples->GetListOfBranches()->At(i)->GetName(); if (name == "likelihood") { continue; } names.push_back(name); } float* params_branch = new float[names.size()]; for (size_t i=0; i<names.size(); i++) { this->samples->SetBranchAddress(names[i].c_str(), ¶ms_branch[i]); } float ml_branch; this->samples->SetBranchAddress("likelihood", &ml_branch); // Build a new TNtuple with samples inside the contour float* v = new float[names.size() + 1]; for (int i=0; i<this->samples->GetEntries(); i++) { this->samples->GetEntry(i); if (ml_branch < this->ml + delta) { for (size_t j=0; j<names.size(); j++) { v[j] = params_branch[j]; } v[names.size()] = ml_branch; contour->Fill(v); } } this->samples->ResetBranchAddresses(); delete[] v; return contour; }
void read18() { ifstream in; in.open("/Users/Yuichi/root/macros/mytext18.txt"); Float_t a,b,c,d,e,k,g,h,i,j; Int_t nlines = 0; TFile *f = new TFile("read18.root","RECREATE"); TNtuple *ntuple = new TNtuple("ntuple","data from reading18 file","a:b:c:d:e:k:g:h:i:j"); while (1) { in >> a >> b >> c >> d >> e >> k >> g >> h >> i >> j; if (!in.good()) break; if (nlines < 100) printf("a=%8f, b=%8f, c=%8f, d=%8f, e=%8f, k=%8f, g=%8f, h=%8f, i=%8f, j=%8f\n",a,b,c,d,e,k,g,h,i,j); ntuple->Fill(a,b,c,d,e,k,g,h,i,j); nlines++; } printf(" found %d points\n",nlines); ntuple->Scan("a:b:c:d:e:k:g:h:i:j"); in.close(); f->Write(); }
void testPicoD0EventRead(TString filename) { gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C"); loadSharedLibraries(); gSystem->Load("StPicoDstMaker"); gSystem->Load("StPicoD0Maker"); TFile* f = new TFile(filename.Data()); TTree* T = (TTree*)f->Get("T"); StPicoD0Event* event = new StPicoD0Event(); T->SetBranchAddress("dEvent",&event); TFile ff("read_test.root","RECREATE"); TNtuple* nt = new TNtuple("nt","","m:pt:eta:phi:theta:" "decayL:kDca:pDca:dca12:cosThetaStar"); StKaonPion* kp = 0; for(Int_t i=0;i<100000;++i) { T->GetEntry(i); TClonesArray* arrKPi = event->kaonPionArray(); for(int idx=0;idx<event->nKaonPion();++idx) { kp = (StKaonPion*)arrKPi->At(idx); nt->Fill(kp->m(),kp->pt(),kp->eta(),kp->phi(),kp->pointingAngle(), kp->decayLength(),kp->kaonDca(),kp->pionDca(),kp->dcaDaughters(),kp->cosThetaStar()); } } nt->Write(); ff.Close(); }
void read21n() { ifstream in; in.open("/Users/Yuichi/root/macros/mytext21.txt"); //Check Float_t hm,zm; //Values Int_t nlines = 0; TFile *f = new TFile("read21.root","RECREATE"); //Output name TNtuple *ntuple = new TNtuple("ntuple","data from read20_3 file","hm:zm"); //Values while (1) { in >> hm >> zm; //input if (!in.good()) break; if (nlines < 100) printf("hm=%8f, zm=%8f\n",hm,zm); //Values ntuple->Fill(hm,zm); //Fill values nlines++; } printf(" found %d points\n",nlines); ntuple->Scan("hm:zm"); //Scan Values in.close(); f->Write(); f->Close(); }
void read25cn() { ifstream in; in.open("/Users/Yuichi/root/macros/mytext25c.txt"); //Check Float_t dRm,dRmbar,dRb,dRbbar; //Values Int_t nlines = 0; TFile *f = new TFile("read25c.root","RECREATE"); //Output name TNtuple *ntuple = new TNtuple("ntuple","data from read25c file","dRm:dRmbar:dRb:dRbbar"); //Values while (1) { in >> dRm >> dRmbar >> dRb >> dRbbar; //input if (!in.good()) break; if (nlines < 100) printf("dRm=%8f, dRmbar=%8f, dRb=%8f, dRbbar=%8f\n",dRm,dRmbar,dRb,dRbbar); //Values ntuple->Fill(dRm,dRmbar,dRb,dRbbar); //Fill values nlines++; } printf(" found %d points\n",nlines); ntuple->Scan("dRm:dRmbar:dRb:dRbbar"); //Scan Values in.close(); f->Write(); f->Close(); }
//////////////////Taking in/out file name as input void loop(string infile, string outfile, bool REAL=0){ //void loop(bool REAL=0){ const char* infname; const char* outfname; ///////////////// if(REAL) { cout<<"--- REAL DATA ---"<<endl; infname = "/net/hidsk0001/d00/scratch/yjlee/bmeson/merged_pPbData_20131114.root"; outfname = "nt_data.root"; } else { cout<<"--- MC ---"<<endl; //infname = "/mnt/hadoop/cms/store/user/wangj/HI_Btuple/20140218_PAMuon_HIRun2013_PromptReco_v1/Bfinder_all_100_1_Jrd.root"; //outfname = "nt_mc.root"; ////////////////// infname = infile.c_str(); outfname = outfile.c_str(); ///////////////// } //File type TFile *f = new TFile(infname); TTree *root = (TTree*)f->Get("demo/root"); //Chain type //TChain* root = new TChain("demo/root"); //root->Add("/mnt/hadoop/cms/store/user/twang/HI_Btuple/20131202_PPMuon_Run2013A-PromptReco-v1_RECO/Bfinder_all_*"); setBranch(root); TFile *outf = new TFile(outfname,"recreate"); int ifchannel[7]; ifchannel[0] = 1; //jpsi+Kp ifchannel[1] = 1; //jpsi+pi ifchannel[2] = 1; //jpsi+Ks(pi+,pi-) ifchannel[3] = 1; //jpsi+K*(K+,pi-) ifchannel[4] = 1; //jpsi+K*(K-,pi+) ifchannel[5] = 1; //jpsi+phi ifchannel[6] = 1; //jpsi+pi pi <= psi', X(3872), Bs->J/psi f0 bNtuple* b0 = new bNtuple; bNtuple* b1 = new bNtuple; bNtuple* b2 = new bNtuple; bNtuple* b3 = new bNtuple; bNtuple* b4 = new bNtuple; bNtuple* b5 = new bNtuple; bNtuple* b6 = new bNtuple; TTree* nt0 = new TTree("ntKp",""); b0->buildBranch(nt0); TTree* nt1 = new TTree("ntpi",""); b1->buildBranch(nt1); TTree* nt2 = new TTree("ntKs",""); b2->buildBranch(nt2); TTree* nt3 = new TTree("ntKstar1",""); b3->buildBranch(nt3); TTree* nt4 = new TTree("ntKstar2",""); b4->buildBranch(nt4); TTree* nt5 = new TTree("ntphi",""); b5->buildBranch(nt5); TTree* nt6 = new TTree("ntmix",""); b6->buildBranch(nt6); TNtuple* ntGen = new TNtuple("ntGen","","y:eta:phi:pt:pdgId"); Long64_t nentries = root->GetEntries(); Long64_t nbytes = 0; TVector3* bP = new TVector3; TVector3* bVtx = new TVector3; TLorentzVector bGen; int type; for (Long64_t i=0; i<100;i++) { // for (Long64_t i=0; i<nentries;i++) { nbytes += root->GetEntry(i); if (i%10000==0) cout <<i<<" / "<<nentries<<endl; for (int j=0;j<BInfo_size;j++) { if(BInfo_type[j]>7) continue; if (ifchannel[BInfo_type[j]-1]!=1) continue; if(BInfo_type[j]==1) { fillTree(b0,bP,bVtx,j); nt0->Fill(); } if(BInfo_type[j]==2) { fillTree(b1,bP,bVtx,j); nt1->Fill(); } if(BInfo_type[j]==3) { fillTree(b2,bP,bVtx,j); nt2->Fill(); } if(BInfo_type[j]==4) { fillTree(b3,bP,bVtx,j); nt3->Fill(); } if(BInfo_type[j]==5) { fillTree(b4,bP,bVtx,j); nt4->Fill(); } if(BInfo_type[j]==6) { fillTree(b5,bP,bVtx,j); nt5->Fill(); } if(BInfo_type[j]==7) { fillTree(b6,bP,bVtx,j); nt6->Fill(); } } for (int j=0;j<GenInfo_size;j++) { for(type=1;type<8;type++) { if(signalGen(type,j)) { bGen.SetPtEtaPhiM(GenInfo_pt[j],GenInfo_eta[j],GenInfo_phi[j],GenInfo_mass[j]); ntGen->Fill(bGen.Rapidity(),bGen.Eta(),bGen.Phi(),bGen.Pt(),GenInfo_pdgId[j]); break; } } } } outf->Write(); outf->Close(); }
int _tmain(int argc, _TCHAR* argv[]) { //const int events = std::atoi(argv[1]); //const int signalOnly = std::atoi(argv[2]); //signalOnly forces events to decay to an electron (although an extremely small amount of events might still miss the main signal detectors I think) const int events = 100000; const int signalOnly = 1; const int eSpectrum = 1; float time = 0; //Rate of muons coming out of the source //0.007 is the muon flux/s/str times 2pi time area times //the numeric factor 0.25 comes from evaluating the integral //gathering power is the fraction accepted times the total gathering power of the top panel //0.253165 comes from the integral(cos(theta)^2.95,d(cos(theta)),0,1), which is the top panel's gathering panel for an incoming intensity //that is proportional to cos(theta)^1.95 float muonRate = muonFlux*2*pi*xT*yT*0.253164556962; //grab dEdx data from file getdEdx(); //output files TFile *outf= new TFile("C:\\Users\\Austin\\Desktop\\11_24_MC_Signal_ESpectrum_100kEvents.root","recreate"); TNtuple * ntuple = new TNtuple("Data","Data","eventNumber:time:mPhi:mtheta:xTrigger:yTrigger:xS1Top:yS1top:xS1Bot:yS1Bot:xS2Top:yS2Top:xS2Bot:yS2Bot:xA:yA:distance:distanceSignal:T:S1:Foam:S2:A:Decay:xDecay:yDecay:zDecay:xExit:yExit:zExit:ePhi:eTheta:eXExit:eYExit:eZExit:eXFinal:eYFinal:eZFinal:E:ELost:fracELost:ELostDetect:fracELostDetect"); for(int i = 0; i<events; i++) { //wait for an amount of time distributed as a exponential described by decayrate muonRate float waitTime = 1/muonRate*log(1.0/getRandom()); time = time+waitTime; //generate muon properties Muon muon = getEvent(time, signalOnly); //generate electron properties Electron e; if(muon.decay) e = getElectron(muon.xDecay, muon.yDecay, muon.zDecay, eSpectrum); //output to TTree here float entry[] = {i, time, muon.phi, muon.theta, muon.xTPlane, muon.yTPlane, muon.xS1PlaneT, muon.yS1PlaneT, muon.xS1PlaneB, muon.yS1PlaneB, muon.xS2PlaneT, muon.yS2PlaneT, muon.xS2PlaneB, muon.yS2PlaneB, muon.xAPlane, muon.yAPlane, muon.distance, muon.distanceSignal, muon.T, muon.S1, muon.Foam, muon.S2, muon.A, muon.decay, muon.xDecay, muon.yDecay, muon.zDecay, muon.xExit, muon.yExit, muon.zExit, e.phi, e.theta, e.xExit, e.yExit, e.zExit, e.xFinal, e.yFinal, e.zFinal, e.energy, e.energyLoss, e.fractionalEnergyLoss, e.energyLossDetected, e.fractionalEnergyLossDetected}; ntuple->Fill(entry); if(i%1000 == 0) std::cout << i <<std::endl; //output for debugging, comment out when making large samples! /* std::cout << "Trajectory: " << muon.phi<< " " <<muon.theta << std::endl; std::cout << std::endl; std::cout << "Trigger: "<< muon.xTPlane<< " " <<muon.yTPlane << std::endl; std::cout << "S1T : " <<muon.xS1PlaneT<< " " <<muon.yS1PlaneT << std::endl; std::cout << "S1B : " <<muon.xS1PlaneB<< " " <<muon.yS1PlaneB << std::endl; std::cout << "S2T : " <<muon.xS2PlaneT<< " " <<muon.yS2PlaneT << std::endl; std::cout << "S2B : " <<muon.xS2PlaneB<< " " <<muon.yS2PlaneB << std::endl; std::cout << "A : " <<muon.xAPlane<< " " <<muon.yAPlane << std::endl; std::cout << std::endl; std::cout << "Trigger: "<<muon.T<< " " <<muon.S1<<" " << muon.Foam<< " " <<muon.S2<<" " << muon.A<<" " <<muon.decay << std::endl; std::cout << "Decay Coordinates: "<<muon.xDecay<<" " <<muon.yDecay<<" " <<muon.zDecay << std::endl; std::cout << "Exit Coordinates: "<<muon.xExit<<" " << muon.yExit<<" " << muon.zExit<<" " << muon.distance << " " << muon.distanceSignal << std::endl; std::cout << std::endl; std::cout << "e Trajectory: " << e.phi << " " <<e.theta << std::endl; std::cout << "e Origin: " << e.xOrigin << " " << e.yOrigin << " " << e.zOrigin << std::endl; std::cout << "e Exit: " << e.xExit << " " << e.yExit << " " << e.zExit << std::endl; std::cout << "e Decay Spot: " << e.xFinal << " " << e.yFinal << " " << e.zFinal << std::endl; std::cout << "Energies: " << e.energy << " " << e.energyLoss << " " << e.fractionalEnergyLoss << " " << e.energyLossDetected << " " << e.fractionalEnergyLossDetected << std::endl; std::cout << std::endl; std::cout << std::endl; */ } outf->Write(); outf->Close(); return 0; }
void swaps::Loop() { gROOT->ProcessLine(".x /home/gcowan/lhcb/lhcbStyle.C"); if (fChain == 0) return; Long64_t nentries = fChain->GetEntriesFast(); TH1D * mKK = new TH1D("mKK", "mKK", 100, 0.99, 1.050); TH1D * mKpi = new TH1D("mKpi", "mKpi", 100, 0.826, 0.966); TH1D * mKp = new TH1D("mKp", "mKp", 50, 1.45, 1.55); TH1D * massHisto = new TH1D("mJpsiKK_DTF", "mJpsiKK_DTF", 100, 5.20, 5.55); TH1D * mBs = new TH1D("mJpsiKK", "mJpsiKK", 100, 5.20, 5.55); TH1D * mBsVeto = new TH1D("mJpsiKKveto", "mJpsiKKveto", 100, 5.20, 5.55); //TH1D * mBsKpi = new TH1D("upper_Bs_sideband", "mJpsiKpi", 40, 5.21, 5.41); //TH1D * mBspiK = new TH1D("lower_Bs_sideband", "mJpsipiK", 40, 5.04, 5.24); TH1D * mBsKpi = new TH1D("upper_Bs_sideband", "mJpsiKpi", 40, 5.51, 5.71); TH1D * mBspiK = new TH1D("lower_Bs_sideband", "mJpsipiK", 40, 5.34, 5.54); TH1D * mJpsi_ = new TH1D("mJpsi", "mJpsi", 100, 3.03, 3.15); TH1D * mJpsi_constr = new TH1D("mJpsi_constr", "mJpsi", 100, 3.03, 3.15); Long64_t nbytes = 0, nb = 0; TFile * file = TFile::Open("reflection_upper_sideband.root", "RECREATE"); TNtuple * tuple = new TNtuple("DecayTree","DecayTree", "mass"); for (Long64_t jentry=0; jentry<nentries;jentry++) { //for (Long64_t jentry=0; jentry<1000;jentry++) { Long64_t ientry = LoadTree(jentry); if (ientry < 0) break; nb = fChain->GetEntry(jentry); nbytes += nb; if ( !(sel_cleantail==1&&sel==1&&(triggerDecisionUnbiased==1||triggerDecisionBiasedExcl==1)&&time>.3&&time<14&&sigmat>0&&sigmat<0.12 // &&(Kplus_pidK-Kplus_pidp)>-5 // &&(Kminus_pidK-Kminus_pidp)>-5 ) ) continue; //double mpi = 139.57018; double mK = 493.68; double mmu = 105.658; double mJpsi = 3096.916; double mpi = 938.27; TLorentzVector Kplus(Kplus_PX, Kplus_PY, Kplus_PZ, sqrt(Kplus_PX*Kplus_PX+Kplus_PY*Kplus_PY+Kplus_PZ*Kplus_PZ + mK*mK)); TLorentzVector Kminus(Kminus_PX, Kminus_PY, Kminus_PZ, sqrt(Kminus_PX*Kminus_PX+Kminus_PY*Kminus_PY+Kminus_PZ*Kminus_PZ + mK*mK)); TLorentzVector KplusWrong(Kplus_PX, Kplus_PY, Kplus_PZ, sqrt(Kplus_PX*Kplus_PX+Kplus_PY*Kplus_PY+Kplus_PZ*Kplus_PZ + mpi*mpi)); TLorentzVector KminusWrong(Kminus_PX, Kminus_PY, Kminus_PZ, sqrt(Kminus_PX*Kminus_PX+Kminus_PY*Kminus_PY+Kminus_PZ*Kminus_PZ + mpi*mpi)); TLorentzVector muplus(muplus_PX, muplus_PY, muplus_PZ, sqrt(muplus_P*muplus_P + mmu*mmu)); TLorentzVector muminus(muminus_PX, muminus_PY, muminus_PZ, sqrt(muminus_P*muminus_P + mmu*mmu)); TLorentzVector Jpsi = muplus + muminus; TLorentzVector Jpsi_constr(muminus_PX+muplus_PX, muminus_PY+muplus_PY, muminus_PZ+muplus_PZ, sqrt(Jpsi.P()*Jpsi.P() + mJpsi*mJpsi)); TLorentzVector KK = Kplus + Kminus; TLorentzVector Kpi = Kplus + KminusWrong; TLorentzVector piK = KplusWrong + Kminus; TLorentzVector B = Jpsi_constr + KK; TLorentzVector BKpi = Jpsi_constr + Kpi; TLorentzVector BpiK = Jpsi_constr + piK; //if ( ((BpiK.M() > 5600 && BpiK.M() < 5640) || (BKpi.M() > 5600 && BKpi.M() < 5640)) ) mBsVeto->Fill(mass/1000.); //if ( ( Kpi.M() > 1490 && Kpi.M() < 1550 ) || ( piK.M() > 1490 && piK.M() < 1550 ) ) continue;//mBsVeto->Fill(mass/1000.); mKK->Fill(KK.M()/1000.); mKp->Fill(Kpi.M()/1000.); mKp->Fill(piK.M()/1000.); mBs->Fill(B.M()/1000.); massHisto->Fill(mass/1000.); mJpsi_->Fill(Jpsi.M()/1000.); mJpsi_constr->Fill(Jpsi_constr.M()/1000.); if (mass > 5420) mBsKpi->Fill(BKpi.M()/1000.); if (mass > 5420) mBsKpi->Fill(BpiK.M()/1000.); if (mass < 5330) mBspiK->Fill(BKpi.M()/1000.); if (mass < 5330) mBspiK->Fill(BpiK.M()/1000.); if (mass > 5400) tuple->Fill(BKpi.M()); if (mass > 5400) tuple->Fill(BpiK.M()); } tuple->Write(); file->Close(); std::cout << "Number of B candidates " << mBs->GetEntries() << std::endl; std::cout << "Number of B candidates after Lambda_b veto" << mBsVeto->GetEntries() << std::endl; gROOT->SetStyle("Plain"); TCanvas * c = new TCanvas("c","c",1600,1200); c->Divide(3,2); c->cd(1); mKK->Draw(); mKK->SetTitle(""); mKK->GetXaxis()->SetTitle("m(KK) [GeV/c^{2}]"); c->cd(2); mJpsi_->Draw(); mJpsi_->SetTitle(""); mJpsi_->GetXaxis()->SetTitle("m(#mu#mu) [GeV/c^{2}]"); c->cd(3); //mKp->Draw(); mKp->SetTitle(""); mKp->GetXaxis()->SetTitle("m(Kp) [GeV/c^{2}]"); c->cd(4); massHisto->Draw(); //massHisto->SetMaximum(1500); mBs->SetLineColor(kRed); mBs->Draw("same"); mBsVeto->SetLineColor(kOrange); mBsVeto->Draw("same"); massHisto->SetTitle(""); massHisto->GetXaxis()->SetTitle("DTF m(J/#psi K^{+}K^{-}) [GeV/c^{2}]"); c->cd(5); mBspiK->Draw(); mBspiK->SetTitle(""); //mBspiK->GetXaxis()->SetTitle("m(J/#psi K#pi) [GeV/c^{2}]"); mBspiK->GetXaxis()->SetTitle("m(J/#psi Kp) [GeV/c^{2}]"); c->cd(6); mBsKpi->Draw(); mBsKpi->SetTitle(""); //mBsKpi->GetXaxis()->SetTitle("m(J/#psi K#pi) [GeV/c^{2}]"); mBsKpi->GetXaxis()->SetTitle("m(J/#psi Kp) [GeV/c^{2}]"); c->SaveAs("plots_swaps.pdf"); }
void CutTree(){ int NMin=300000; /* char outputfilename[200]; sprintf(outputfilename,"Results/ProblemBin.txt"); printf("output filename is: %s\n", outputfilename); FILE *outputFile = fopen(outputfilename,"w"); */ TFile* fInData = new TFile(fileNameData); TTree *treeData = (TTree*)fInData->Get("data"); treeData->Print(); TTree *fChain; fChain=treeData; Long64_t nentries = fChain->GetEntries(); cout<<nentries<<endl; Long64_t nb = 0; Double_t JpsiMass; Double_t JpsiPt; Double_t JpsiRap; Double_t Jpsict; Int_t JpsiType_idx; Int_t MCType_idx; Double_t costh_CS; Double_t phi_CS; Double_t costh_HX; Double_t phi_HX; TBranch *b_JpsiMass; //! TBranch *b_JpsiPt; //! TBranch *b_JpsiRap; //! TBranch *b_Jpsict; //! TBranch *b_JpsiType_idx; //! TBranch *b_MCType_idx; //! TBranch *b_costh_CS; //! TBranch *b_phi_CS; //! TBranch *b_costh_HX; //! TBranch *b_phi_HX; //! fChain->SetBranchAddress("JpsiMass", &JpsiMass, &b_JpsiMass); fChain->SetBranchAddress("JpsiPt", &JpsiPt, &b_JpsiPt); fChain->SetBranchAddress("JpsiRap", &JpsiRap, &b_JpsiRap); fChain->SetBranchAddress("Jpsict", &Jpsict, &b_Jpsict); fChain->SetBranchAddress("JpsiType_idx", &JpsiType_idx, &b_JpsiType_idx); fChain->SetBranchAddress("MCType_idx", &MCType_idx, &b_MCType_idx); fChain->SetBranchAddress("costh_CS", &costh_CS, &b_costh_CS); fChain->SetBranchAddress("phi_CS", &phi_CS, &b_phi_CS); fChain->SetBranchAddress("costh_HX", &costh_HX, &b_costh_HX); fChain->SetBranchAddress("phi_HX", &phi_HX, &b_phi_HX); // Long64_t jentry=NMin; TNtuple* pseudodata = new TNtuple("data","data","JpsiMass:JpsiPt:JpsiRap:Jpsict:costh_CS:phi_CS:costh_HX:phi_HX:JpsiType_idx:MCType_idx"); TNtuple* data = new TNtuple("data","data","JpsiMass:JpsiPt:JpsiRap:Jpsict:costh_CS:phi_CS:costh_HX:phi_HX:JpsiType_idx:MCType_idx"); for (Long64_t jentry=0; jentry<NMin;jentry++) { if(jentry % 1000 == 0) printf("event %d\n", (Int_t) jentry); nb = fChain->GetEntry(jentry); //nbytes += nb; pseudodata->Fill(JpsiMass,JpsiPt,JpsiRap,Jpsict,costh_CS,phi_CS,costh_HX,phi_HX,JpsiType_idx,MCType_idx); } for (Long64_t jentry=0; jentry<nentries;jentry++) { if(jentry % 1000 == 0) printf("event %d\n", (Int_t) jentry); nb = fChain->GetEntry(jentry); //nbytes += nb; // fprintf(outputFile, "%f\n",Jpsict); data->Fill(JpsiMass,JpsiPt,JpsiRap,Jpsict,costh_CS,phi_CS,costh_HX,phi_HX,JpsiType_idx,MCType_idx); } pseudodata->Print(); pseudodata->SaveAs("/scratch/knuenz/Polarization/RootInput/TNtuple_red_PR_pseudo.root"); data->Print(); data->SaveAs("/scratch/knuenz/Polarization/RootInput/TNtuple_red_PR.root"); // RooDataSetData.Print(); // fclose(outputFile); // treeData.Print(); return; }
int main(int argc, char *argv[]) { if (argc == 1) { cout << "Example: SP_fit data/SP_fit_Collicott_Martel.dat --Pascalutsa out.root 5" << endl; return 1; } SP_fit fitter; params fitparam(11.2, 2.5, 0, 0, 0, 0); double scaler_spread = 2; double spin_spread = 6; // Set up Data handler DataHandling dataHandler; dataHandler.process_file_list(argv[1]); vector<data> datapoint = dataHandler.GetDataList(); // Quickly parse through arguments to find theory and filelist string theory_code; string flag(argv[2]); if (flag == "--Pascalutsa") theory_code = "Pascalutsa"; else if (flag == "--Pasquini") theory_code = "Pasquini"; else { cout << "Error: unknown theory " << argv[2] << endl; cout << "Using default Pascalutsa" << endl; theory_code = "Pascalutsa"; } // Set up some ROOT storage string name; if (argc > 3) name = argv[3]; else name = "SP_fit.root"; TFile *f = new TFile(name.c_str(),"RECREATE"); TNtuple *ntuple = new TNtuple("SP_fit", "SP_fit", "instance:call:alpha:beta:E1E1:M1M1:E1M2:M1E2"); TNtuple *start_values = new TNtuple("start_values", "start_values", "instance:alpha_start:beta_start:E1E1_start:M1M1_start:E1M2_start:M1E2_start"); TNtuple *result = new TNtuple("result", "result", "instance:alpha:alpha_error:beta:beta_error:E1E1:E1E1_error:M1M1:M1M1_error:E1M2:E1M2_error:M1E2:M1E2_error:chi"); // Get number of fits int n_fits = 1; if(argv[4]) n_fits = atoi(argv[4]); //Type of random number distribution uniform_real_distribution<double> alpha(fitparam.alpha - scaler_spread, fitparam.alpha + scaler_spread); //(min, max) uniform_real_distribution<double> beta(fitparam.beta - scaler_spread, fitparam.beta + scaler_spread); //(min, max) uniform_real_distribution<double> E1E1(fitparam.E1E1 - spin_spread, fitparam.E1E1 + spin_spread); //(min, max) uniform_real_distribution<double> M1M1(fitparam.M1M1 - spin_spread, fitparam.M1M1 + spin_spread); //(min, max) uniform_real_distribution<double> E1M2(fitparam.E1M2 - spin_spread, fitparam.E1M2 + spin_spread); //(min, max) uniform_real_distribution<double> M1E2(fitparam.M1E2 - spin_spread, fitparam.M1E2 + spin_spread); //(min, max) mt19937 rng_alpha; rng_alpha.seed(random_device{}()); mt19937 rng_beta; rng_beta.seed(random_device{}()); mt19937 rng_E1E1; rng_E1E1.seed(random_device{}()); mt19937 rng_M1M1; rng_M1M1.seed(random_device{}()); mt19937 rng_E1M2; rng_E1M2.seed(random_device{}()); mt19937 rng_M1E2; rng_M1E2.seed(random_device{}()); // generate N random fits. double alpha_result = 0.0; double beta_result = 0.0; double E1E1_result = 0.0; double M1M1_result = 0.0; double E1M2_result = 0.0; double M1E2_result = 0.0; double dalpha_result = 0.0; double dbeta_result = 0.0; double dE1E1_result = 0.0; double dM1M1_result = 0.0; double dE1M2_result = 0.0; double dM1E2_result = 0.0; for (int i=0; i<n_fits; i++) { params random_fitparam(alpha(rng_alpha), beta(rng_beta), E1E1(rng_E1E1), M1M1(rng_M1M1), E1M2(rng_E1M2), M1E2(rng_M1E2)); APLCON::Result_t ra = fitter.run(argc,argv,datapoint,theory_code,random_fitparam,i,f,ntuple); start_values->Fill(i, ra.Variables.at("alpha").Value.Before, ra.Variables.at("beta").Value.Before, ra.Variables.at("E1E1").Value.Before, ra.Variables.at("M1M1").Value.Before, ra.Variables.at("E1M2").Value.Before, ra.Variables.at("M1E2").Value.Before ); result->Fill(i, ra.Variables.at("alpha").Value.After, ra.Variables.at("alpha").Sigma.After, ra.Variables.at("beta").Value.After, ra.Variables.at("beta").Sigma.After, ra.Variables.at("E1E1").Value.After, ra.Variables.at("E1E1").Sigma.After, ra.Variables.at("M1M1").Value.After, ra.Variables.at("M1M1").Sigma.After, ra.Variables.at("E1M2").Value.After, ra.Variables.at("E1M2").Sigma.After, ra.Variables.at("M1E2").Value.After, ra.Variables.at("M1E2").Sigma.After, ra.ChiSquare ); alpha_result+=ra.Variables.at("alpha").Value.After; beta_result+=ra.Variables.at("beta").Value.After; E1E1_result+=ra.Variables.at("E1E1").Value.After; M1M1_result+=ra.Variables.at("M1M1").Value.After; E1M2_result+=ra.Variables.at("E1M2").Value.After; M1E2_result+=ra.Variables.at("M1E2").Value.After; dalpha_result+=ra.Variables.at("alpha").Sigma.After; dbeta_result+=ra.Variables.at("beta").Sigma.After; dE1E1_result+=ra.Variables.at("E1E1").Sigma.After; dM1M1_result+=ra.Variables.at("M1M1").Sigma.After; dE1M2_result+=ra.Variables.at("E1M2").Sigma.After; dM1E2_result+=ra.Variables.at("M1E2").Sigma.After; } // Compute average parameters alpha_result = alpha_result/double(n_fits); beta_result = beta_result/double(n_fits); E1E1_result = E1E1_result/double(n_fits); M1M1_result = M1M1_result/double(n_fits); E1M2_result = E1M2_result/double(n_fits); M1E2_result = M1E2_result/double(n_fits); dalpha_result = dalpha_result/double(n_fits); dbeta_result = dbeta_result/double(n_fits); dE1E1_result = dE1E1_result/double(n_fits); dM1M1_result = dM1M1_result/double(n_fits); dE1M2_result = dE1M2_result/double(n_fits); dM1E2_result = dM1E2_result/double(n_fits); // Display results // DisplayResults display; // display.ShowFitResults(f,datapoint,alpha_result,beta_result,E1E1_result,M1M1_result,E1M2_result,M1E2_result,theory_code); f->Write(); // Output final, averaged results cout << "****************************************" << endl; cout << "Averaged results:" << endl; cout << "alpha: " << alpha_result << " +- " << dalpha_result << endl; cout << "beta: " << beta_result << " +- " << dbeta_result << endl; cout << "E1E1: " << E1E1_result << " +- " << dE1E1_result << endl; cout << "M1M1: " << M1M1_result << " +- " << dM1M1_result << endl; cout << "E1M2: " << E1M2_result << " +- " << dE1M2_result << endl; cout << "M1E2: " << M1E2_result << " +- " << dM1E2_result << endl; return 0; }
int main(int argc, char* argv[]) { TApplication theApp(srcName.Data(), &argc, argv); //============================================================================= if (argc<5) return -1; TString sPath = argv[1]; if (sPath.IsNull()) return -1; TString sFile = argv[2]; if (sFile.IsNull()) return -1; TString sJetR = argv[3]; if (sJetR.IsNull()) return -1; TString sSjeR = argv[4]; if (sSjeR.IsNull()) return -1; //============================================================================= sPath.ReplaceAll("#", "/"); //============================================================================= double dJetR = -1.; if (sJetR=="JetR02") dJetR = 0.2; if (sJetR=="JetR03") dJetR = 0.3; if (sJetR=="JetR04") dJetR = 0.4; if (sJetR=="JetR05") dJetR = 0.5; if (dJetR<0.) return -1; cout << "Jet R = " << dJetR << endl; //============================================================================= double dSjeR = -1.; if (sSjeR=="SjeR01") dSjeR = 0.1; if (sSjeR=="SjeR02") dSjeR = 0.2; if (sSjeR=="SjeR03") dSjeR = 0.3; if (sSjeR=="SjeR04") dSjeR = 0.4; if (dSjeR<0.) return -1; cout << "Sub-jet R = " << dSjeR << endl; //============================================================================= const double dJetsPtMin = 0.001; const double dCutEtaMax = 1.6; const double dJetEtaMax = 1.; const double dJetAreaRef = TMath::Pi() * dJetR * dJetR; fastjet::GhostedAreaSpec areaSpc(dCutEtaMax); fastjet::JetDefinition jetsDef(fastjet::antikt_algorithm, dJetR, fastjet::BIpt_scheme, fastjet::Best); fastjet::AreaDefinition areaDef(fastjet::active_area_explicit_ghosts,areaSpc); fastjet::Selector selectJet = fastjet::SelectorAbsEtaMax(dJetEtaMax); fastjet::JetDefinition subjDef(fastjet::kt_algorithm, dSjeR, fastjet::BIpt_scheme, fastjet::Best); //============================================================================= std::vector<fastjet::PseudoJet> fjInput; const Double_t dCut = TMath::TwoPi() / 3.; //============================================================================= enum { kWgt, kXsc, kLje, kLjr, kLtk, kLtr, kJet, kAje, kMje, k1sz, k1sA, k1sm, k1sr, k2sz, k2sA, k2sm, k2sr, kDsm, kDsr, kVar }; TFile *file = TFile::Open(Form("%s.root",sFile.Data()), "NEW"); TNtuple *nt = new TNtuple("nt", "", "fWgt:fXsc:fLje:fLjr:fLtk:fLtr:fJet:fAje:fMje:f1sj:f1sA:f1sm:f1sr:f2sj:f2sA:f2sm:f2sr:fDsm:fDsr"); //============================================================================= HepMC::IO_GenEvent ascii_in(Form("%s/%s.hepmc",sPath.Data(),sFile.Data()), std::ios::in); HepMC::GenEvent *evt = ascii_in.read_next_event(); while (evt) { fjInput.resize(0); double dLtk = -1.; TVector3 vPar, vLtk; for (HepMC::GenEvent::particle_const_iterator p=evt->particles_begin(); p!=evt->particles_end(); ++p) if ((*p)->status()==1) { double dEta = (*p)->momentum().eta(); if (TMath::Abs(dEta)>dCutEtaMax) continue; double dTrk = (*p)->momentum().perp(); double dPhi = (*p)->momentum().phi(); vPar.SetPtEtaPhi(dTrk, dEta, dPhi); fjInput.push_back(fastjet::PseudoJet(vPar.Px(), vPar.Py(), vPar.Pz(), vPar.Mag())); if (dTrk>dLtk) { dLtk = dTrk; vLtk.SetPtEtaPhi(dTrk, dEta, dPhi); } } //============================================================================= fastjet::ClusterSequenceArea clustSeq(fjInput, jetsDef, areaDef); std::vector<fastjet::PseudoJet> includJets = clustSeq.inclusive_jets(dJetsPtMin); std::vector<fastjet::PseudoJet> selectJets = selectJet(includJets); //============================================================================= if (selectJets.size()>0) { std::vector<fastjet::PseudoJet> sortedJets = fastjet::sorted_by_pt(selectJets); TVector3 vLje; vLje.SetPtEtaPhi(sortedJets[0].pt(), sortedJets[0].eta(), sortedJets[0].phi()); TVector3 vJet; int kJrl = -1; double dJrl = -1.; int kTrl = -1; double dTrl = -1.; for (int j=0; j<sortedJets.size(); j++) { double dJet = sortedJets[j].pt(); sortedJets[j].set_user_index(-1); vJet.SetPtEtaPhi(dJet, sortedJets[j].eta(), sortedJets[j].phi()); if (TMath::Abs(vJet.DeltaPhi(vLje))>dCut) { sortedJets[j].set_user_index(1); if (dJet>dJrl) { dJrl = dJet; kJrl = j; } } if (TMath::Abs(vJet.DeltaPhi(vLtk))>dCut) { sortedJets[j].set_user_index(2); if (dJet>dTrl) { dTrl = dJet; kTrl = j; } } } //============================================================================= TVector3 v1sj, v2sj; for (int j=0; j<sortedJets.size(); j++) { Float_t dVar[kVar]; for (Int_t i=0; i<kVar; i++) dVar[i] = -1.; dVar[kWgt] = 1.; dVar[kXsc] = 1.; vJet.SetPtEtaPhi(sortedJets[j].pt(), sortedJets[j].eta(), sortedJets[j].phi()); //============================================================================= dVar[kLje] = vLje.Pt(); if (sortedJets[j].user_index()==1) { dVar[kLjr] = ((kJrl==j) ? 1.5 : 0.5); } dVar[kLtk] = vLtk.Pt(); if (sortedJets[j].user_index()==2) { dVar[kLtr] = ((kTrl==j) ? 1.5 : 0.5); } //============================================================================= dVar[kJet] = sortedJets[j].pt(); dVar[kAje] = sortedJets[j].area(); dVar[kMje] = sortedJets[j].m(); //============================================================================= fastjet::Filter trimmer(subjDef, fastjet::SelectorPtFractionMin(0.)); fastjet::PseudoJet trimmdJet = trimmer(sortedJets[j]); std::vector<fastjet::PseudoJet> trimmdSj = trimmdJet.pieces(); double d1sj = -1.; int k1sj = -1; double d2sj = -1.; int k2sj = -1; for (int i=0; i<trimmdSj.size(); i++) { double dIsj = trimmdSj[i].pt(); if (dIsj<0.001) continue; if (dIsj>d1sj) { d2sj = d1sj; k2sj = k1sj; d1sj = dIsj; k1sj = i; } else if (dIsj>d2sj) { d2sj = dIsj; k2sj = i; } } //============================================================================= if (d1sj>0.) { v1sj.SetPtEtaPhi(d1sj, trimmdSj[k1sj].eta(), trimmdSj[k1sj].phi()); dVar[k1sz] = d1sj; dVar[k1sA] = trimmdSj[k1sj].area(); dVar[k1sm] = trimmdSj[k1sj].m(); dVar[k1sr] = v1sj.DeltaR(vJet); } if (d2sj>0.) { v2sj.SetPtEtaPhi(d2sj, trimmdSj[k2sj].eta(), trimmdSj[k2sj].phi()); dVar[k2sz] = d2sj; dVar[k2sA] = trimmdSj[k2sj].area(); dVar[k2sm] = trimmdSj[k2sj].m(); dVar[k2sr] = v2sj.DeltaR(vJet); } if ((d1sj>0.) && (d2sj>0.)) dVar[kDsr] = v2sj.DeltaR(v1sj); nt->Fill(dVar); } } //============================================================================= delete evt; ascii_in >> evt; } //============================================================================= file->cd(); nt->Write(); file->Close(); //============================================================================= TString sXsec = sFile; sXsec.ReplaceAll("out", "xsecs"); file = TFile::Open(Form("%s/xsecs/%s.root",sPath.Data(),sXsec.Data()), "READ"); TH1D *hPtHat = (TH1D*)file->Get("hPtHat"); hPtHat->SetDirectory(0); TH1D *hWeightSum = (TH1D*)file->Get("hWeightSum"); hWeightSum->SetDirectory(0); TProfile *hSigmaGen = (TProfile*)file->Get("hSigmaGen"); hSigmaGen->SetDirectory(0); file->Close(); //============================================================================= sFile.ReplaceAll("out", "wgt"); file = TFile::Open(Form("%s.root",sFile.Data()), "NEW"); hPtHat->Write(); hWeightSum->Write(); hSigmaGen->Write(); file->Close(); //============================================================================= cout << "DONE" << endl; //============================================================================= return 0; }
int main(int argc, char **argv) { TFile *f; TFile *newf; TNtuple *ntuple; TNtuple *newntuple; TH1F *h1; TF1 *func; TString Metal; TString dataLoc; Int_t dataSL; if(argc < 5 || argc > 6){ std::cout << "The number of arguments is incorrect" << std::endl; return 0; } dataLoc = argv[1]; PHI_MIN = (Double_t) std::stod(argv[2]); PHI_MAX = (Double_t) std::stod(argv[3]); N_PHI = (Int_t) std::stoi(argv[4]); if(argc >= 6) Metal = argv[5]; dataSL = dataLoc.Length(); if(dataLoc(dataSL-1, 1) != "/"){ dataLoc = dataLoc + "/"; } std::cout << "The following settings are being used" << std::endl; std::cout << "Data Directory = " << dataLoc << std::endl; std::cout << PHI_MIN << " < PHI < " << PHI_MAX << ", N_PHI = " << N_PHI << std::endl; if(argc == 6) std::cout << "Running only for Metal "<< Metal << std::endl; else std::cout << "Running all Metals" << std::endl; Float_t Q2, Xb, Zh, Pt, Phi, Val, Err; Float_t A, Ac, Acc; Float_t AErr, AcErr, AccErr; Float_t ChiSQ; Int_t nentries, empty; if(Metal == "") N_METAL = 6; else N_METAL = 1; for(Int_t met = 0; met < N_METAL; met++){ if(Metal == ""){ if(met == 0) Metal = "C"; else if(met == 1) Metal = "Fe"; else if(met == 2) Metal = "Pb"; else if(met == 3) Metal = "D_C"; else if(met == 4) Metal = "D_Fe"; else if(met == 5) Metal = "D_Pb"; } if(dataLoc == "") f = new TFile("../Gen5DimData/" + Metal + "_5_dim_dist.root", "READ"); else f = new TFile(dataLoc + Metal + "_5_dim_dist.root", "READ"); ntuple = (TNtuple*) f->Get("fit_data"); nentries = ntuple->GetEntries(); ntuple->SetBranchAddress("Xb", &Xb); ntuple->SetBranchAddress("Q2", &Q2); ntuple->SetBranchAddress("Xb", &Xb); ntuple->SetBranchAddress("Zh", &Zh); ntuple->SetBranchAddress("Pt", &Pt); ntuple->SetBranchAddress("Phi", &Phi); ntuple->SetBranchAddress("Val", &Val); ntuple->SetBranchAddress("Err", &Err); newntuple = new TNtuple("AAcAcc_data", "AAcAcc_data", "Q2:Xb:Zh:Pt:A:AErr:Ac:AcErr:Acc:AccErr:ChiSQ"); func = new TF1("fit", "[0]+TMath::Cos(x*TMath::Pi()/180)*[1]+TMath::Cos(2*x*TMath::Pi()/180)*[2]"); newf = new TFile(Metal + "newphihist.root", "RECREATE"); newf->cd(); for(Int_t i = 0; i < nentries; i = i + N_PHI){ ntuple->GetEntry(i); h1 = new TH1F((const char*) Form("PhiDist Q2=%.3f Xb=%.3f Zh=%.3f Pt=%.3f", Q2, Xb, Zh, Pt), (const char*) Form("PhiDist Q2=%.3f Xb=%.3f Zh=%.3f Pt=%.3f", Q2, Xb, Zh, Pt), N_PHI, PHI_MIN, PHI_MAX); empty = 0; for(Int_t j = 1; j <= N_PHI; j++){ ntuple->GetEntry(i+j-1); h1->SetBinContent(j, Val); if(h1->GetBinContent(j) == 0) empty++; h1->SetBinError(j, Err*1.04); } if(empty <= (N_PHI - MIN_BIN)){ h1->Fit(func, "q"); h1->Write(); if(func->GetNDF() != 0){ ChiSQ = func->GetChisquare(); A = func->GetParameter(0); AErr = func->GetParError(0); Ac = func->GetParameter(1); AcErr = func->GetParError(1); Acc = func->GetParameter(2); AccErr = func->GetParError(2); newntuple->Fill(Q2, Xb, Zh, Pt, A, AErr, Ac, AcErr, Acc, AccErr, ChiSQ); } } h1->Delete(); } Metal = ""; delete ntuple; newf->cd(); newntuple->Write(); newntuple->Delete(); newf->Close(); delete newf; f->Close(); delete f; } return 0; }
void Bd2JpsiKst_reflections::Loop() { gROOT->ProcessLine(".x /Users/gcowan/lhcb/lhcbStyle.C"); if (fChain == 0) return; Long64_t nentries = fChain->GetEntriesFast(); //TH1D * mKK = new TH1D("mKK", "mKK", 100, 0.99, 1.050); TH1D * mKK = new TH1D("mKK", "mKK", 100, 1.45, 1.55); //TH1D * mKK = new TH1D("mKK", "mKK", 100, 0.4, 0.6); TH1D * mKpi = new TH1D("mKpi", "mKpi", 100, 0.826, 0.966); TH1D * massHisto = new TH1D("mBd_DTF", "mBd_DTF", 100, 5.15, 5.4); TH1D * mBd = new TH1D("mBd", "mBd", 100, 5.15, 5.4); TH1D * mBs = new TH1D("mBs", "mBs", 100, 5.20, 5.55); //TH1D * mB_lower = new TH1D("lower_sideband", "lower_sideband", 100, 5.15, 5.4); //TH1D * mB_upper = new TH1D("upper_sideband", "upper_sideband", 100, 5.15, 5.4); //TH1D * mB_lower = new TH1D("lower_sideband", "lower_sideband", 60, 5.3, 5.45); // for looking at Bs -> JpsiKK where K -> pi misid //TH1D * mB_upper = new TH1D("upper_sideband", "upper_sideband", 60, 5.3, 5.45);// for looking at Bs -> JpsiKK where K -> pi misid TH1D * mB_lower = new TH1D("lower_sideband", "lower_sideband", 40, 5.55, 5.7); TH1D * mB_upper = new TH1D("upper_sideband", "upper_sideband", 40, 5.55, 5.7); TH1D * mJpsi_ = new TH1D("mJpsi", "mJpsi", 100, 3.03, 3.15); TH1D * mJpsi_constr = new TH1D("mJpsi_constr", "mJpsi", 100, 3.03, 3.15); Long64_t nbytes = 0, nb = 0; TFile * file = TFile::Open("reflection_upper_sideband.root", "RECREATE"); TNtuple * tuple = new TNtuple("DecayTree","DecayTree", "mass"); for (Long64_t jentry=0; jentry<nentries;jentry++) { //for (Long64_t jentry=0; jentry<1000;jentry++) { Long64_t ientry = LoadTree(jentry); if (ientry < 0) break; nb = fChain->GetEntry(jentry); nbytes += nb; double mpi = 139.57018; double mK = 493.68; double mmu = 105.658; double mJpsi = 3096.916; double mp = 938.27; TLorentzVector Kplus(K1_Px, K1_Py, K1_Pz, sqrt(K1_Px*K1_Px+K1_Py*K1_Py+K1_Pz*K1_Pz + mK*mK)); TLorentzVector Piminus(Pi1_Px, Pi1_Py, Pi1_Pz, sqrt(Pi1_Px*Pi1_Px+Pi1_Py*Pi1_Py+Pi1_Pz*Pi1_Pz + mpi*mpi)); TLorentzVector KplusWrong(K1_Px, K1_Py, K1_Pz, sqrt(K1_Px*K1_Px+K1_Py*K1_Py+K1_Pz*K1_Pz + mpi*mpi)); //TLorentzVector PiminusWrong(Pi1_Px, Pi1_Py, Pi1_Pz, sqrt(Pi1_Px*Pi1_Px+Pi1_Py*Pi1_Py+Pi1_Pz*Pi1_Pz + mK*mK)); TLorentzVector PiminusWrong(Pi1_Px, Pi1_Py, Pi1_Pz, sqrt(Pi1_Px*Pi1_Px+Pi1_Py*Pi1_Py+Pi1_Pz*Pi1_Pz + mp*mp)); TLorentzVector muplus(Mu1_Px, Mu1_Py, Mu1_Pz, sqrt(Mu1_P*Mu1_P + mmu*mmu)); TLorentzVector muminus(Mu2_Px, Mu2_Py, Mu2_Pz, sqrt(Mu2_P*Mu2_P + mmu*mmu)); TLorentzVector Jpsi = muplus + muminus; TLorentzVector Jpsi_constr(Mu2_Px+Mu1_Px, Mu2_Py+Mu1_Py, Mu2_Pz+Mu1_Pz, sqrt(Jpsi.P()*Jpsi.P() + mJpsi*mJpsi)); TLorentzVector KK = Kplus + PiminusWrong; // testing Bs -> JpsiKK hypothesis //TLorentzVector KK = Piminus + KplusWrong; // testing Bd -> Jpsi pipi hypothesis TLorentzVector Kpi = Kplus + Piminus; TLorentzVector B = Jpsi_constr + Kpi; TLorentzVector BKK = Jpsi_constr + KK; mKK->Fill(KK.M()/1000.); mKpi->Fill(Kpi.M()/1000.); mBd->Fill(B.M()/1000.); massHisto->Fill(Bd_M/1000.); mJpsi_->Fill(Jpsi.M()/1000.); mJpsi_constr->Fill(Jpsi_constr.M()/1000.); if (Bd_M > 5320) mB_upper->Fill(BKK.M()/1000.); if (Bd_M < 5230) mB_lower->Fill(BKK.M()/1000.); if (Bd_M > 5320) tuple->Fill(BKK.M()); } tuple->Write(); file->Close(); std::cout << "Number of B candidates " << mBs->GetEntries() << std::endl; TCanvas * c = new TCanvas("c","c",1600,1200); c->SetBottomMargin(0); c->Divide(3,2, 0.01, 0.01); c->cd(1); mKK->Draw(); mKK->SetTitle(""); //mKK->GetXaxis()->SetTitle("m(KK) [GeV/c^{2}]"); mKK->GetXaxis()->SetTitle("m(Kp) [GeV/c^{2}]"); c->cd(2); mJpsi_->Draw(); mJpsi_->SetTitle(""); mJpsi_->GetXaxis()->SetTitle("m(#mu#mu) [GeV/c^{2}]"); c->cd(3); mKpi->Draw(); mKpi->SetTitle(""); mKpi->GetXaxis()->SetTitle("m(K#pi) [GeV/c^{2}]"); c->cd(4); massHisto->Draw(); //massHisto->SetMaximum(1500); mBd->SetLineColor(kRed); mBd->Draw("same"); massHisto->SetTitle(""); massHisto->GetXaxis()->SetTitle("DTF m(J/#psi K#pi) [GeV/c^{2}]"); c->cd(5); mB_lower->Draw(); mB_lower->SetTitle(""); mB_lower->GetXaxis()->SetTitle("m(J/#psi Kp) [GeV/c^{2}]"); //mB_lower->GetXaxis()->SetTitle("m(J/#psi KK) [GeV/c^{2}]"); c->cd(6); mB_upper->Draw(); mB_upper->SetTitle(""); mB_upper->GetXaxis()->SetTitle("m(J/#psi Kp) [GeV/c^{2}]"); //mB_upper->GetXaxis()->SetTitle("m(J/#psi KK) [GeV/c^{2}]"); c->SaveAs("plots_Bd2JpsiKst_reflections.pdf"); }
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(); }
// A simple function to fill ntuples randomly void fillRandom (TNtuple & ntuple, TRandom3 & rndm, UInt_t n) { for (auto i : ROOT::TSeqI(n)) ntuple.Fill(rndm.Gaus()); }
TF1 *bFeedDownFraction(double ptMin=20,double ptMax=25) { /* TFile *infMCP = new TFile("miniNtuplePrompt.root"); TFile *infMCNP = new TFile("miniNtupleNonPrompt.root"); TFile *infData = new TFile("miniData.root"); */ TFile *infMCP = new TFile("ntD_EvtBase_20160303_Dfinder_20160302_pp_Pythia8_prompt_D0_dPt0tkPt0p5_pthatweight.root"); TFile *infMCNP = new TFile("ntD_EvtBase_20160303_Dfinder_20160302_pp_Pythia8_nonprompt_D0_dPt0tkPt0p5_pthatweight.root"); // TFile *infData = new TFile("miniData.root"); TFile *infData = new TFile("ppData.root"); TTree *tMCP = (TTree*)infMCP->Get("ntDkpi"); TTree *tMCNP = (TTree*)infMCNP->Get("ntDkpi"); TTree *tMCPHI = (TTree*)infMCP->Get("ntHi"); TTree *tMCNPHI = (TTree*)infMCNP->Get("ntHi"); TTree *tData = (TTree*)infData->Get("ntDkpi"); tMCP->AddFriend(tMCPHI); tMCNP->AddFriend(tMCNPHI); TFile *outf = new TFile(Form("output-%.0f-%.0f.root",ptMin,ptMax),"recreate"); TNtuple *nt = new TNtuple("nt","","ptMin:ptMax:Frac:FracErr"); TCanvas *cSideband = new TCanvas("cSideband","Data Sideband",1200,1200); cSideband->Divide(2,2); cSideband->cd(1); TCut cutpp ="Dy>-1.&&Dy<1.&&Dtrk1highPurity&&Dtrk2highPurity&&Dtrk1Pt>2.0&&Dtrk2Pt>2.0&&(DsvpvDistance/DsvpvDisErr)>3.5&&(DlxyBS/DlxyBSErr)>2.5&&Dchi2cl>0.05&&Dalpha<0.12&&Dtrk1PtErr/Dtrk1Pt<0.1&&Dtrk2PtErr/Dtrk2Pt<0.1&&abs(Dtrk1Eta)<2.0&&abs(Dtrk2Eta)<2.0&&Dtrk1Algo>3&&Dtrk1Algo<8&&Dtrk2Algo>3&&Dtrk2Algo<8&&(Dtrk1PixelHit+Dtrk1StripHit)>=11&&(Dtrk2PixelHit+Dtrk2StripHit)>=11&&(Dtrk1Chi2ndf/(Dtrk1nStripLayer+Dtrk1nPixelLayer)<0.15)&&(Dtrk2Chi2ndf/(Dtrk2nStripLayer+Dtrk2nPixelLayer)<0.15)"; TCut cutmc="(Dgen==23333||Dgen==23344)"; TCut cutpt=Form("Dpt>%f&&Dpt<%f",ptMin,ptMax); TCut cutSignal = "abs(Dmass-1.8649)<0.025"; TCut cutSideband = "abs(Dmass-1.8649)>0.075&&abs(Dmass-1.8649)<0.1"; // TCut weightfuncFtionreco="((TMath::Erf((log(DsvpvDisErr))*(Dgenpt*Dgenpt*(-0.001)+0.1021*Dgenpt+1.247)+(Dgenpt*Dgenpt*(-0.0032)+0.2912*Dgenpt+6.8275))+1))*(pow(10,-0.168499*Dgenpt+3.872855+Dgenpt*Dgenpt*0.000556)+pow(10,-0.068599*Dgenpt+2.512265+Dgenpt*Dgenpt*0.000331))"; TCut weightfunctionreco = "pthatweight"; int nBin=20; double binL=3.5; double binH=103.5; double fitRangeL=3.5; double fitRangeH=100.5; if (ptMax<=6) { fitRangeH=43.5; binH=43.5; } float bins[6+1]={3.5,5.5,8.5,10.5,20.5,30.5,50.5}; TH1D *hSideband = new TH1D("hSideband","Sideband",nBin,binL,binH); TH1D *hData = new TH1D("hData","Data",nBin,binL,binH); TH1D *hMCPSignal = new TH1D("hMCPSignal","Prompt",nBin,binL,binH); TH1D *hMCNPSignal = new TH1D("hMCNPSignal","Non-prompt",nBin,binL,binH); TH1D *hMCPSideband = new TH1D("hMCPSideband","",nBin,binL,binH); TH1D *hMCNPSideband = new TH1D("hMCNPSideband","",nBin,binL,binH); hSideband->Sumw2(); hData->Sumw2(); hMCPSignal->Sumw2(); hMCNPSignal->Sumw2(); tData->Draw("(DsvpvDistance/DsvpvDisErr)>>hSideband",cutpt&&cutpp&&cutSideband); tData->Draw("(DsvpvDistance/DsvpvDisErr)>>hData",cutpt&&cutpp&&cutSignal); tMCP->Draw("(DsvpvDistance/DsvpvDisErr)>>hMCPSignal",weightfunctionreco*(cutpt&&cutpp&&cutSignal&&cutmc)); //tMCP->Draw("(DsvpvDistance/DsvpvDisErr)>>hMCPSideband",cutpt&&cutpp&&cutSideband); tMCNP->Draw("(DsvpvDistance/DsvpvDisErr)>>hMCNPSignal",weightfunctionreco*(cutpt&&cutpp&&cutSignal&&cutmc)); //tMCNP->Draw("(DsvpvDistance/DsvpvDisErr)>>hMCNPSideband",cutpt&&cutpp&&cutSideband); hSideband->Scale(1./1.); hData->Add(hSideband,-1); normalize(hData,1); normalize(hMCPSignal,2); normalize(hMCNPSignal,4); normalize(hSideband,kGreen+2); TF1 *fSideband = new TF1("fSideband","[0]*(exp([1]*x+[2])+[3]*exp([4]*x+[5])+[6]*exp([7]*x+[8]))"); TF1 *fMCPSignal = new TF1("fMCPSignal","[0]*(exp([1]*x+[2])+[3]*exp([4]*x+[5])+[6]*exp([7]*x+[8]))"); TF1 *fMCNPSignal = new TF1("fMCNPSignal","[0]*(exp([1]*x+[2])+[3]*exp([4]*x+[5])+[6]*exp([7]*x+[8]))"); fSideband->SetParameters(0,-0.1,0.2,-0,-2,0.006,-0.01,-0.11,-0.04,0,0.001); fMCNPSignal->SetParameters(0,-0.1,0.1,-0,-0.02,0.006,-0.01,-0.11,-0.04,0,0.001); fMCPSignal->SetParameters(0,-0.1,0.1,-0,-0.02,0.006,-0.01,-0.11,-0.04,0,0.001); // fMCNPSignal->FixParameter(3,0); // fMCPSignal->FixParameter(3,0); fMCPSignal->SetParLimits(1,-100,0); fMCPSignal->SetParLimits(4,-100,0); fMCPSignal->SetParLimits(7,-100,0); fMCNPSignal->SetParLimits(1,-100,0); fMCNPSignal->SetParLimits(4,-100,0); fMCNPSignal->SetParLimits(7,-100,0); fMCPSignal->SetParLimits(0,0,1e10); fMCPSignal->SetParLimits(3,0,1e10); fMCPSignal->SetParLimits(6,0,1e10); fMCNPSignal->SetParLimits(0,0,1e10); fMCNPSignal->SetParLimits(3,0,1e10); fMCNPSignal->SetParLimits(6,0,1e10); hSideband->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband"," q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband"," q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband","LL q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband"," q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband"," q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband","m q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband","m q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband","m q","",fitRangeL,fitRangeH); hSideband->Fit("fSideband"," q","",fitRangeL,fitRangeH); double normSideband = hSideband->Integral(0,0.12); cSideband->cd(2); hMCPSignal->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal"," q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal"," q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal","LL q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal"," q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal"," q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal","m q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal","m q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal","m q","",fitRangeL,fitRangeH); hMCPSignal->Fit("fMCPSignal"," m q","",fitRangeL,fitRangeH); double normMCPSignal = hMCPSignal->Integral(0,0.12); cSideband->cd(3); hMCNPSignal->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal"," q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal"," q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal","LL q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal"," q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal"," q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal","m q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal","m q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal","m q","",fitRangeL,fitRangeH); hMCNPSignal->Fit("fMCNPSignal","m q","",fitRangeL,fitRangeH); double normMCNPSignal = hMCNPSignal->Integral(0,0.12); string sSideband = Form("(%e)*(exp((%e)*x+(%e))+(%e)*exp((%e)*x+(%e))+(%e)*exp((%e)*x+(%e)))",fSideband->GetParameter(0),fSideband->GetParameter(1),fSideband->GetParameter(2),fSideband->GetParameter(3),fSideband->GetParameter(4),fSideband->GetParameter(5),fSideband->GetParameter(6),fSideband->GetParameter(7),fSideband->GetParameter(8)); string sMCPSignal = Form("(%e)*(exp((%e)*x+(%e))+(%e)*exp((%e)*x+(%e))+(%e)*exp((%e)*x+(%e)))",fMCPSignal->GetParameter(0),fMCPSignal->GetParameter(1),fMCPSignal->GetParameter(2),fMCPSignal->GetParameter(3),fMCPSignal->GetParameter(4),fMCPSignal->GetParameter(5),fMCPSignal->GetParameter(6),fMCPSignal->GetParameter(7),fMCPSignal->GetParameter(8)); string sMCNPSignal = Form("(%e)*(exp((%e)*x+(%e))+(%e)*exp((%e)*x+(%e))+(%e)*exp((%e)*x+(%e)))",fMCNPSignal->GetParameter(0),fMCNPSignal->GetParameter(1),fMCNPSignal->GetParameter(2),fMCNPSignal->GetParameter(3),fMCNPSignal->GetParameter(4),fMCNPSignal->GetParameter(5),fMCNPSignal->GetParameter(6),fMCNPSignal->GetParameter(7),fMCNPSignal->GetParameter(8)); string function; function="0*("+sSideband+")+[1]*([2]*"+sMCPSignal+"+(1-[2])*("+sMCNPSignal+"))"; string functionNP; functionNP="0*("+sSideband+")+[1]*(0*"+sMCPSignal+"+(1-[2])*("+sMCNPSignal+"))"; TCanvas *cFit = new TCanvas("cFit","Fit",600,600); TF1 *f = new TF1("f",function.c_str()); f->SetParameters(1,0.1,0.9,0,0.1); f->SetParLimits(0,0,1000); f->SetParLimits(2,-1,2); f->SetLineColor(2); f->SetFillColor(2); f->SetFillStyle(3001); f->Draw("same"); hData->SetAxisRange(fitRangeL,fitRangeH,"X"); hData->Fit("f","LL"); hData->Fit("f","LL"); hData->Fit("f","LL"); hData->Fit("f","LL"); hData->Fit("f","m"); hData->SetXTitle("Flight Distance Significance"); hData->SetYTitle("Event Fraction"); TF1 *fNP = new TF1("fNP",functionNP.c_str()); fNP->SetParameters(f->GetParameter(0),f->GetParameter(1),f->GetParameter(2)); fNP->SetRange(fitRangeL,fitRangeH*2); fNP->SetLineColor(4); fNP->SetFillStyle(3001); fNP->SetFillColor(4); hData->SetStats(0); hData->Draw("same"); fNP->Draw("same"); cout <<fNP->Integral(3.5,60)/f->Integral(3.5,60)<<endl; TLegend *leg = new TLegend(0.5,0.7,0.9,0.9); leg->SetBorderSize(0); leg->SetFillStyle(0); leg->AddEntry(hData,"pp data","pl"); leg->AddEntry(f,Form("Prompt Fraction %.1f #pm %.1f %%",100*f->GetParameter(2),100*f->GetParError(2)),""); leg->AddEntry(f,"Prompt D^{0}","f"); leg->AddEntry(fNP,"Non-Prompt D^{0}","f"); leg->Draw(); cSideband->cd(4); hMCPSignal->Draw("hist"); hSideband->Draw("hist same"); hMCNPSignal->Draw("hist same"); hData->Draw("same"); nt->Fill(ptMin,ptMax,f->GetParameter(2),f->GetParError(2)); nt->Write(); outf->Write(); // outf->Close(); return f; }
int main(int argc, char* argv[]){ TApplication* a = new TApplication("a", 0, 0); TStyle* style= DrawTools::setStyle(); style->cd(); std::string outputdir = "CalibComparisonPlots/"; std::string mkdir_command = "mkdir -p " + outputdir; system( mkdir_command.c_str() ); std::string runName0 = "BTF_259_20140502-012847_beam"; std::string runName1 = "BTF_259_20140502-012847_beam"; std::string runName2 = "BTF_259_20140502-012847_beam"; std::string runName3 = "BTF_259_20140502-012847_beam"; std::string runName4 = "BTF_259_20140502-012847_beam"; //std::string tag = "default"; std::string tag = "V03"; std::string inputDir = "./CeF3Calibration"; if( argc == 5 ) { std::string runName_str0(argv[1]); runName0 = runName_str0; std::string runName_str1(argv[2]); runName1 = runName_str1; std::string runName_str2(argv[3]); runName2 = runName_str2; std::string tag_str(argv[4]); tag = tag_str; } else if(argc == 7){ std::string runName_str0(argv[1]); runName0 = runName_str0; std::string runName_str1(argv[2]); runName1 = runName_str1; std::string runName_str2(argv[3]); runName2 = runName_str2; std::string runName_str3(argv[4]); runName3 = runName_str3; std::string runName_str4(argv[5]); runName4 = runName_str4; std::string tag_str(argv[6]); tag = tag_str; } else{ std::cout<<"Usage:"<<std::endl; std::cout<<"./calibrateCef3 BTF_XX BTF_XX BTF_XX tag "<<std::endl; exit(12345); } TCanvas* canny = new TCanvas("canny", "",200,200); canny->cd(); ifstream in; float x; int nlines; TNtuple *ntuple = new TNtuple("ntuple","data from .txt file", "x"); double corr0[4]; double corr_uncert0[4]; double corr1[4]; double corr_uncert1[4]; double corr2[4]; double corr_uncert2[4]; double corr3[4]; double corr_uncert3[4]; double corr4[4]; double corr_uncert4[4]; int const ntot = 10; TString openname[ntot] = { Form("%s/constants_%s_%s.txt",inputDir.c_str(),runName0.c_str(), tag.c_str() ), Form("%s/constants_uncert_%s_%s.txt", inputDir.c_str(),runName0.c_str(), tag.c_str()), Form("%s/constants_%s_%s.txt", inputDir.c_str(),runName1.c_str(), tag.c_str()), Form("%s/constants_uncert_%s_%s.txt", inputDir.c_str(),runName1.c_str(), tag.c_str()), Form("%s/constants_%s_%s.txt",inputDir.c_str(), runName2.c_str(), tag.c_str() ),Form("%s/constants_uncert_%s_%s.txt", inputDir.c_str(), runName2.c_str(), tag.c_str() ), Form("%s/constants_%s_%s.txt", inputDir.c_str(), runName3.c_str(), tag.c_str() ), Form("%s/constants_uncert_%s_%s.txt", inputDir.c_str(), runName3.c_str(), tag.c_str() ), Form("%s/constants_%s_%s.txt", inputDir.c_str(), runName4.c_str(), tag.c_str() ),Form("%s/constants_uncert_%s_%s.txt", inputDir.c_str(), runName4.c_str(), tag.c_str() ) }; for(int i=0; i<ntot+1; ++i){ in.open(openname[i-1]); while (nlines<4) { in>>x; if(!in.good()) break; ntuple->Fill(x); nlines++; } in.close(); nlines=0; } ntuple->SetBranchAddress("x",&x); for(int j=0; j<4; ++j){ ntuple->GetEntry(j); corr0[j]= x; ntuple->GetEntry(j+4); corr_uncert0[j]=x; ntuple->GetEntry(j+8); corr1[j]= x; ntuple->GetEntry(j+12); corr_uncert1[j]=x; ntuple->GetEntry(j+16); corr2[j]= x; ntuple->GetEntry(j+20); corr_uncert2[j]=x; if(argc==7){ ntuple->GetEntry(j+24); corr3[j]= x; ntuple->GetEntry(j+28); corr_uncert3[j]=x; ntuple->GetEntry(j+32); corr4[j]= x; ntuple->GetEntry(j+36); corr_uncert4[j]=x; } } double ch0[4] = {-0.1,0.9,1.9,2.9}; double ch1[4]={-0.05,0.95,1.95, 2.95}; double ch2[4] = {0,1,2,3}; double ch3[4] = {0.05,1.05,2.05,3.05}; double ch4[4] ={0.1,1.1,2.1,3.1}; double cherr[4]={0,0,0,0}; TGraphErrors* graf0 = new TGraphErrors(4,ch0,corr0,cherr,corr_uncert0); graf0->SetMarkerStyle(9); graf0->SetMarkerSize(0.5); graf0->SetMarkerColor(kGreen+1); TGraphErrors* graf1 = new TGraphErrors(4,ch1,corr1,cherr,corr_uncert1); graf1->SetMarkerStyle(9); graf1->SetMarkerSize(0.5); graf1->SetMarkerColor(kBlue); TGraphErrors* graf2 = new TGraphErrors(4,ch2,corr2,cherr,corr_uncert2); graf2->SetMarkerStyle(9); graf2->SetMarkerSize(0.5); graf2->SetMarkerColor(kMagenta); TMultiGraph *multi=new TMultiGraph(); multi->Add(graf0); multi->Add(graf1); multi->Add(graf2); TLegend* leg = new TLegend(0.7, 0.7, 0.9, 0.9); if(argc==5){ leg->AddEntry(graf0,"Run 92","P"); leg->AddEntry(graf1,"Run 246","P"); leg->AddEntry(graf2,"Run 259","P"); multi->SetTitle(";Channel Nr.;Correction Factor"); multi->Draw("AP"); multi->GetYaxis()->SetRangeUser(0.975,1.025); multi->GetXaxis()->SetNdivisions(4); } if(argc==7){ graf1->SetMarkerColor(kCyan+1); graf2->SetMarkerColor(kBlue); TGraphErrors* graf3 = new TGraphErrors(4,ch3,corr3,cherr,corr_uncert3); graf3->SetMarkerStyle(9); graf3->SetMarkerSize(0.5); graf3->SetMarkerColor(kViolet-1); TGraphErrors* graf4 = new TGraphErrors(4,ch4,corr4,cherr,corr_uncert4); graf4->SetMarkerStyle(9); graf4->SetMarkerSize(0.5); graf4->SetMarkerColor(kPink+7); multi->Add(graf3); multi->Add(graf4); multi->SetTitle(";Channel Nr.;Correction Factor"); multi->Draw("AP"); leg->AddEntry(graf0,"98.3 MeV","P"); leg->AddEntry(graf1,"147.4 MeV","P"); leg->AddEntry(graf2,"196.5 MeV","P"); leg->AddEntry(graf3,"294.8 MeV","P"); leg->AddEntry(graf4,"491.4 MeV","P"); //multi->GetYaxis()->SetRangeUser(0.9,1.1); multi->GetXaxis()->SetNdivisions(4); } multi->SetTitle(";Channel Nr.;Correction Factor"); multi->Draw("AP"); canny->Update(); leg->SetFillColor(0); leg->Draw("same"); TLine* lin = new TLine(-0.25,1.,3.25,1.); lin->SetLineColor(kRed); lin->Draw(); if(argc==5){canny->SaveAs( Form( "%s/comparison_%s.pdf", outputdir.c_str(), tag.c_str() )); } else if(argc==7){ canny->SaveAs( Form( "%s/comparison_energy_%s.pdf", outputdir.c_str(), tag.c_str() ));} delete canny; return 0; }
void buildtupledata(TString code)//(TString collision = "PbPbBJet", TString jetalgo = "akVs4PFJetAnalyzer") { if (!dt(code)) { cout<<"Not data: "<<code<<", exiting..."<<endl; return;} bool PbPb = isPbPb(code); TString sample = getSample(code); jettree = getjettree(code); subTag = subTagging(code); Init(PbPb, sample); TString outputfilenamedj = outputfolder+"/"+code+"_djt.root"; TString outputfilenameinc = outputfolder+"/"+code+"_inc.root"; TString outputfilenameevt = outputfolder+"/"+code+"_evt.root"; TString djvars = TString("run:lumi:event:prew:triggermatched:bin:vz:hiHF:hltCSV60:hltCSV80:hltCaloJet40:hltCaloJet60:hltCaloJet80:hltPFJet60:hltPFJet80:dijet:")+ "hltCalo60jtpt:hltCalo60jtphi:hltCalo60jteta:hltCalo80jtpt:hltCalo80jtphi:hltCalo80jteta:hltCSV60jtpt:hltCSV60jtphi:hltCSV60jteta:hltCSV80jtpt:hltCSV80jtphi:hltCSV80jteta:"+ "rawpt1:jtpt1:jtphi1:jteta1:discr_csvV1_1:svtxm1:discr_prob1:svtxdls1:svtxpt1:svtxntrk1:nsvtx1:nselIPtrk1:"+ "rawpt2:jtpt2:jtphi2:jteta2:discr_csvV1_2:svtxm2:discr_prob2:svtxdls2:svtxpt2:svtxntrk2:nsvtx2:nselIPtrk2:dphi21:"+ "rawpt3:jtpt3:jtphi3:jteta3:discr_csvV1_3:svtxm3:discr_prob3:svtxdls3:svtxpt3:svtxntrk3:nsvtx3:nselIPtrk3:dphi31:dphi32:"+ "SLord:rawptSL:jtptSL:jtphiSL:jtetaSL:discr_csvV1_SL:svtxmSL:discr_probSL:svtxdlsSL:svtxptSL:svtxntrkSL:nsvtxSL:nselIPtrkSL:dphiSL1"; for (auto w:weights) cout<<w<<"\t"; cout<<endl; int totentries = 0; //now fill histos TFile *foutdj = new TFile(outputfilenamedj,"recreate"); TNtuple *ntdj = new TNtuple("nt","ntdj",djvars); TFile *foutinc = new TFile(outputfilenameinc,"recreate"); TNtuple *ntinc = new TNtuple("nt","ntinc","prew:goodevent:bin:vz:hiHF:hltCSV60:hltCSV80:hltCaloJet40:hltCaloJet60:hltCaloJet80:hltPFJet60:hltPFJet80:rawpt:jtpt:jtphi:jteta:discr_csvV1:svtxm:discr_prob:svtxdls:svtxpt:svtxntrk:nsvtx:nselIPtrk"); TFile *foutevt = new TFile(outputfilenameevt,"recreate"); TNtuple *ntevt = new TNtuple("nt","ntinc","prew:bin:vz:hiHF:hltCSV60:hltCSV80"); for (unsigned i=0;i<subfoldernames.size();i++) { //get all files for unmerged forests auto files = list_files(TString::Format("%s/%s/",samplesfolder.Data(),subfoldernames[i].Data())); for (auto filename:files) { cout<<endl<<"Processing file "<<filename<<endl; TFile *f = new TFile(filename); TString treename = jettree;//f->Get(jettree) != 0 ? jettree : "ak3PFJetAnalyzer"; TTreeReader reader(treename,f); TTreeReaderValue<int> nref(reader, "nref"); TTreeReaderArray<float> rawpt(reader, "rawpt"); TTreeReaderArray<float> jtpt(reader, "jtpt"); TTreeReaderArray<float> jteta(reader, "jteta"); TTreeReaderArray<float> jtphi(reader, "jtphi"); TTreeReaderArray<float> discr_csvV1(reader, "discr_csvV1"); TTreeReaderArray<float> discr_prob(reader, "discr_prob"); TTreeReaderArray<float> svtxm(reader, "svtxm"); TTreeReaderArray<float> svtxdls(reader, "svtxdls"); TTreeReaderArray<float> svtxpt(reader, "svtxpt"); TTreeReaderArray<int> svtxntrk(reader, "svtxntrk"); TTreeReaderArray<int> nsvtx(reader, "nsvtx"); TTreeReaderArray<int> nselIPtrk(reader, "nselIPtrk"); TTreeReaderArray<float> *muMax=0, *muMaxTRK=0, *muMaxGBL=0; if (PbPb) { muMax = new TTreeReaderArray<float> (reader, "muMax"); muMaxTRK = new TTreeReaderArray<float>(reader, "muMaxTRK"); muMaxGBL = new TTreeReaderArray<float>(reader, "muMaxGBL"); } //HLT_HIPuAK4CaloBJetCSV80_Eta2p1_v1 HLT_HIPuAK4CaloJet80_Eta5p1_v1 TString calojet40trigger = !PbPb ? "HLT_AK4CaloJet40_Eta5p1_v1" : "HLT_HIPuAK4CaloJet40_Eta5p1_v1"; TString calojet40triggerv2 = !PbPb ? "HLT_AK4CaloJet40_Eta5p1_v1" : "HLT_HIPuAK4CaloJet40_Eta5p1_v2"; TString calojet60trigger = !PbPb ? "HLT_AK4CaloJet60_Eta5p1_v1" : "HLT_HIPuAK4CaloJet60_Eta5p1_v1"; TString calojet80trigger = !PbPb ? "HLT_AK4CaloJet80_Eta5p1_v1" : "HLT_HIPuAK4CaloJet80_Eta5p1_v1"; //dummy vars in PbPb case TString pfjet60trigger = !PbPb ? "HLT_AK4PFJet60_Eta5p1_v1" : "LumiBlock"; TString pfjet80trigger = !PbPb ? "HLT_AK4PFJet80_Eta5p1_v1" : "LumiBlock"; TString csv60trigger = !PbPb ? "HLT_AK4PFBJetBCSV60_Eta2p1_v1" : "HLT_HIPuAK4CaloBJetCSV60_Eta2p1_v1"; TString csv80trigger = !PbPb ? "HLT_AK4PFBJetBCSV80_Eta2p1_v1" : "HLT_HIPuAK4CaloBJetCSV80_Eta2p1_v1"; //PbPb pprimaryVertexFilter && pclusterCompatibilityFilter do nothing vector<TString> filterNames; if (PbPb) filterNames = {"pcollisionEventSelection", "HBHENoiseFilterResultRun2Loose"}; else filterNames = {"pPAprimaryVertexFilter", "HBHENoiseFilterResultRun2Loose", "pBeamScrapingFilter"}; TTreeReader readerhlt("hltanalysis/HltTree",f); TTreeReaderValue<int> PFJet60(readerhlt, pfjet60trigger); TTreeReaderValue<int> PFJet80(readerhlt, pfjet80trigger); TTreeReaderValue<int> CaloJet40(readerhlt, calojet40trigger); TTreeReaderValue<int> CaloJet40v2(readerhlt, calojet40triggerv2); TTreeReaderValue<int> CaloJet60(readerhlt, calojet60trigger); TTreeReaderValue<int> CaloJet80(readerhlt, calojet80trigger); TTreeReaderValue<int> CSV60(readerhlt, csv60trigger); TTreeReaderValue<int> CSV80(readerhlt, csv80trigger); TTreeReader readercsv60object("hltobject/HLT_HIPuAK4CaloBJetCSV60_Eta2p1_v",f); TTreeReaderValue<vector<Double_t> > csv60pt(readercsv60object, "pt"); TTreeReaderValue<vector<Double_t> > csv60eta(readercsv60object, "eta"); TTreeReaderValue<vector<Double_t> > csv60phi(readercsv60object, "phi"); TTreeReader readercsv80object("hltobject/HLT_HIPuAK4CaloBJetCSV80_Eta2p1_v",f); TTreeReaderValue<vector<Double_t> > csv80pt(readercsv80object, "pt"); TTreeReaderValue<vector<Double_t> > csv80eta(readercsv80object, "eta"); TTreeReaderValue<vector<Double_t> > csv80phi(readercsv80object, "phi"); TTreeReader readerCalo60object("hltobject/HLT_HIPuAK4CaloJet60_Eta5p1_v",f); TTreeReaderValue<vector<Double_t> > calo60pt(readerCalo60object, "pt"); TTreeReaderValue<vector<Double_t> > calo60eta(readerCalo60object, "eta"); TTreeReaderValue<vector<Double_t> > calo60phi(readerCalo60object, "phi"); TTreeReader readerCalo80object("hltobject/HLT_HIPuAK4CaloJet80_Eta5p1_v",f); TTreeReaderValue<vector<Double_t> > calo80pt(readerCalo80object, "pt"); TTreeReaderValue<vector<Double_t> > calo80eta(readerCalo80object, "eta"); TTreeReaderValue<vector<Double_t> > calo80phi(readerCalo80object, "phi"); TTreeReader readerevt("hiEvtAnalyzer/HiTree",f); TTreeReaderValue<float> vz(readerevt, "vz"); TTreeReaderValue<int> bin(readerevt, "hiBin"); TTreeReaderValue<float> hiHF(readerevt, "hiHF"); TTreeReaderValue<unsigned int> run(readerevt, "run"); TTreeReaderValue<unsigned int> lumi(readerevt, "lumi"); TTreeReaderValue<unsigned long long> event(readerevt, "evt"); TTreeReader readerskim("skimanalysis/HltTree",f); vector<TTreeReaderValue<int> *>filters; for (auto f:filterNames) filters.push_back(new TTreeReaderValue<int>(readerskim, f)); cout<<"added filters"<<endl; int nev = reader.GetEntries(true); cout<<nev<<endl; totentries+=nev; int onep = nev/100; int evCounter = 0; TTimeStamp t0; //for testing - only 10% of data //while (evCounter<2*onep && reader.Next()) { //go full file while (reader.Next()) { readerhlt.Next(); readerevt.Next(); readerskim.Next(); readercsv60object.Next(); readercsv80object.Next(); readerCalo60object.Next(); readerCalo80object.Next(); evCounter++; if (evCounter%onep==0) { std::cout << std::fixed; TTimeStamp t1; cout<<" \r"<<evCounter/onep<<"% "<<" total time "<<(int)round((t1-t0)*nev/(evCounter+.1))<<" s "<<flush; } int bPFJet60 = !PbPb ? *PFJet60 : 1; int bPFJet80 = !PbPb ? *PFJet80 : 1; //int jet40 = *CaloJet40 || *CaloJet40v2; float weight = 1; if (!PbPb) weight = getweight(subfoldernames[i], bPFJet60, bPFJet80); if (PbPb && sample=="j60") weight = *CaloJet60;//only calojet 40 ntevt->Fill(weight, *bin, *vz, *hiHF, *CSV60, *CSV80); if (weight==0) continue; //good event is vertex cut and noise cuts bool goodevent = abs(*vz)<15; for (auto f:filters) goodevent&=*(*f); int ind1=-1, ind2=-1, ind3=-1, indSL=-1; //indices of leading/subleading jets in jet array int indTrigCSV60=-1, indTrigCSV80=-1, indTrigCalo60=-1, indTrigCalo80=-1; int SLord = 0; bool foundJ1=false, foundJ2 = false, foundJ3 = false, foundSL = false; //found/not found yet, for convenience bool triggermatched = false; if (goodevent) for (int j=0;j<*nref;j++) { //acceptance selection if (abs(jteta[j])>1.5) continue; //muon cuts if (PbPb) { if((*muMax)[j]/rawpt[j]>0.95) continue; if( ((*muMaxTRK)[j]-(*muMaxGBL)[j]) / ((*muMaxTRK)[j]+(*muMaxGBL)[j]) > 0.1) continue; } if (!foundJ1) { //looking for the leading jet ind1 = j; foundJ1=true; if (PbPb) { indTrigCSV60 = triggeredLeadingJetCSV(jtphi[j], jteta[j], *csv60pt, *csv60phi, *csv60eta); indTrigCSV80 = triggeredLeadingJetCSV(jtphi[j], jteta[j], *csv80pt, *csv80phi, *csv80eta); indTrigCalo60 = triggeredLeadingJetCalo(jtphi[j], jteta[j], *calo60pt, *calo60phi, *calo60eta); indTrigCalo80 = triggeredLeadingJetCalo(jtphi[j], jteta[j], *calo80pt, *calo80phi, *calo80eta); } triggermatched = !PbPb || indTrigCSV60!=-1 || indTrigCSV80!=-1; } else if (foundJ1 && !foundJ2) { ind2 = j; foundJ2 = true; } else if (foundJ1 && foundJ2 && !foundJ3) { ind3 = j; foundJ3 = true; } //we need ordinal number of SL jets, so counting until found //indSL != SLord because some jets are not in acceptance region if (!foundSL) SLord++; //ind1!=j otherwise SL will be = J1 if (foundJ1 && ind1!=j && !foundSL && discr_csvV1[j]>0.9) { indSL = j; foundSL = true; } //at this point foundLJ = true always, so triggermatched is determined vector<float> vinc = {weight, (float)triggermatched, (float) *bin, *vz, *hiHF,(float)*CSV60, (float)*CSV80,(float)*CaloJet40, (float)*CaloJet60, (float)*CaloJet80, (float)bPFJet60,(float)bPFJet80, rawpt[j], jtpt[j], jtphi[j], jteta[j], discr_csvV1[j],svtxm[j],discr_prob[j], svtxdls[j],svtxpt[j],(float)svtxntrk[j],(float)nsvtx[j],(float)nselIPtrk[j]}; ntinc->Fill(&vinc[0]); } //fill dijet ntuple vector<float> vdj; vdj = {(float)*run, (float)*lumi, (float)*event, weight, (float)triggermatched, (float)*bin, *vz,*hiHF, (float)*CSV60, (float)*CSV80,(float)*CaloJet40,(float)*CaloJet60, (float)*CaloJet80,(float)bPFJet60,(float)bPFJet80, foundJ1 && foundJ2 ? (float)1 : (float)0, indTrigCalo60!=-1 ? (float)(*calo60pt)[indTrigCalo60] : NaN, indTrigCalo60!=-1 ? (float)(*calo60phi)[indTrigCalo60] : NaN, indTrigCalo60!=-1 ? (float)(*calo60eta)[indTrigCalo60] : NaN, indTrigCalo80!=-1 ? (float)(*calo80pt)[indTrigCalo80] : NaN, indTrigCalo80!=-1 ? (float)(*calo80phi)[indTrigCalo80] : NaN, indTrigCalo80!=-1 ? (float)(*calo80eta)[indTrigCalo80] : NaN, indTrigCSV60!=-1 ? (float)(*csv60pt)[indTrigCSV60] : NaN, indTrigCSV60!=-1 ? (float)(*csv60phi)[indTrigCSV60] : NaN, indTrigCSV60!=-1 ? (float)(*csv60eta)[indTrigCSV60] : NaN, indTrigCSV80!=-1 ? (float)(*csv80pt)[indTrigCSV80] : NaN, indTrigCSV80!=-1 ? (float)(*csv80phi)[indTrigCSV80] : NaN, indTrigCSV80!=-1 ? (float)(*csv80eta)[indTrigCSV80] : NaN, foundJ1 ? rawpt[ind1] : NaN, foundJ1 ? jtpt[ind1] : NaN, foundJ1 ? jtphi[ind1] : NaN, foundJ1 ? jteta[ind1] : NaN, foundJ1 ? discr_csvV1[ind1] : NaN, foundJ1 ? svtxm[ind1] : NaN, foundJ1 ? discr_prob[ind1] : NaN, foundJ1 ? svtxdls[ind1] : NaN, foundJ1 ? svtxpt[ind1] : NaN, foundJ1 ? (float)svtxntrk[ind1] : NaN, foundJ1 ? (float)nsvtx[ind1] : NaN, foundJ1 ? (float)nselIPtrk[ind1] : NaN, foundJ2 ? rawpt[ind2] : NaN, foundJ2 ? jtpt[ind2] : NaN, foundJ2 ? jtphi[ind2] : NaN, foundJ2 ? jteta[ind2] : NaN, foundJ2 ? discr_csvV1[ind2] : NaN, foundJ2 ? svtxm[ind2] : NaN, foundJ2 ? discr_prob[ind2] : NaN, foundJ2 ? svtxdls[ind2] : NaN, foundJ2 ? svtxpt[ind2] : NaN, foundJ2 ? (float)svtxntrk[ind2] : NaN, foundJ2 ? (float)nsvtx[ind2] : NaN, foundJ2 ? (float)nselIPtrk[ind2] : NaN, foundJ2 && foundJ1 ? acos(cos(jtphi[ind2]-jtphi[ind1])) : NaN, foundJ3 ? rawpt[ind3] : NaN, foundJ3 ? jtpt[ind3] : NaN, foundJ3 ? jtphi[ind3] : NaN, foundJ3 ? jteta[ind3] : NaN, foundJ3 ? discr_csvV1[ind3] : NaN, foundJ3 ? svtxm[ind3] : NaN, foundJ3 ? discr_prob[ind3] : NaN, foundJ3 ? svtxdls[ind3] : NaN, foundJ3 ? svtxpt[ind3] : NaN, foundJ3 ? (float)svtxntrk[ind3] : NaN, foundJ3 ? (float)nsvtx[ind3] : NaN, foundJ3 ? (float)nselIPtrk[ind3] : NaN, foundJ3 && foundJ1 ? acos(cos(jtphi[ind3]-jtphi[ind1])) : NaN, foundJ3 && foundJ2 ? acos(cos(jtphi[ind3]-jtphi[ind2])) : NaN, foundSL ? (float)SLord : NaN, foundSL ? rawpt[indSL] : NaN, foundSL ? jtpt[indSL] : NaN, foundSL ? jtphi[indSL] : NaN, foundSL ? jteta[indSL] : NaN, foundSL ? discr_csvV1[indSL] : NaN, foundSL ? svtxm[indSL] : NaN, foundSL ? discr_prob[indSL] : NaN, foundSL ? svtxdls[indSL] : NaN, foundSL ? svtxpt[indSL] : NaN, foundSL ? (float)svtxntrk[indSL] : NaN, foundSL ? (float)nsvtx[indSL] : NaN, foundSL ? (float)nselIPtrk[indSL] : NaN, foundSL && foundJ1 ? acos(cos(jtphi[indSL]-jtphi[ind1])) : NaN}; ntdj->Fill(&vdj[0]); } f->Close(); } } foutevt->cd(); ntevt->Write(); foutevt->Close(); foutdj->cd(); ntdj->Write(); foutdj->Close(); foutinc->cd(); ntinc->Write(); foutinc->Close(); cout<<endl; cout<<"Total input entries "<<totentries<<endl; //making centrality-dependent ntuples //PutInCbins(outputfolder, code, {{0,40}, {80,200}}); if (PbPb && sample=="bjt"){ auto w = calculateWeightsBjet(outputfilenamedj); updatePbPbBtriggerweight(outputfilenamedj,w); updatePbPbBtriggerweight(outputfilenameinc,w); updatePbPbBtriggerweight(outputfilenameevt,w); } else { updateweight(outputfilenamedj); updateweight(outputfilenameinc); updateweight(outputfilenameevt); } }
void httpserver(const char* jobname = "job1", Long64_t maxcnt = 0) { TString filename = Form("%s.root", jobname); TFile *hfile = new TMemFile(filename,"RECREATE","Demo ROOT file with histograms"); // Create some histograms, a profile histogram and an ntuple TH1F *hpx = new TH1F("hpx","This is the px distribution",100,-4,4); hpx->SetFillColor(48); TH2F *hpxpy = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4); TProfile *hprof = new TProfile("hprof","Profile of pz versus px",100,-4,4,0,20); TNtuple *ntuple = new TNtuple("ntuple","Demo ntuple","px:py:pz:random:i"); hfile->Write(); // http server with port 8080, use jobname as top-folder name THttpServer* serv = new THttpServer(Form("http:8080?top=%s", jobname)); // fastcgi server with port 9000, use jobname as top-folder name // THttpServer* serv = new THttpServer(Form("fastcgi:9000?top=%s_fastcgi", jobname)); // dabc agent, connects to DABC master_host:1237, works only when DABC configured // THttpServer* serv = new THttpServer(Form("dabc:master_host:1237?top=%s_dabc", jobname)); // when read-only mode disabled one could execute object methods like TTree::Draw() serv->SetReadOnly(kFALSE); // One could specify location of newer version of JSROOT // serv->SetJSROOT("https://root.cern.ch/js/latest/"); // serv->SetJSROOT("http://jsroot.gsi.de/latest/"); gBenchmark->Start(jobname); // Create a new canvas. TCanvas *c1 = new TCanvas("c1","Dynamic Filling Example",200,10,700,500); c1->SetFillColor(42); c1->GetFrame()->SetFillColor(21); c1->GetFrame()->SetBorderSize(6); c1->GetFrame()->SetBorderMode(-1); // Fill histograms randomly TRandom3 random; Float_t px, py, pz; const Int_t kUPDATE = 1000; Long64_t i = 0; while (true) { random.Rannor(px,py); pz = px*px + py*py; Float_t rnd = random.Rndm(1); hpx->Fill(px); hpxpy->Fill(px,py); hprof->Fill(px,pz); // fill only first 25000 events in NTuple if (i<25000) ntuple->Fill(px,py,pz,rnd,i); if (i && (i%kUPDATE) == 0) { if (i == kUPDATE) hpx->Draw(); c1->Modified(); c1->Update(); if (i == kUPDATE) hfile->Write(); if (gSystem->ProcessEvents()) break; } i++; if ((maxcnt>0) && (i>=maxcnt)) break; } gBenchmark->Show(jobname); }
void createGlauberTree(Int_t nEvents, const char *outFileName) { AliPDG::AddParticlesToPdgDataBase(); TDatabasePDG::Instance(); // Run loader TFolder *folder = new TFolder("myfolder","myfolder"); AliRunLoader* rl = new AliRunLoader(folder); rl->MakeHeader(); rl->MakeStack(); AliStack* stack = rl->Stack(); //AliHeader* rheader = rl->GetHeader(); AliGenHijing *genHi = new AliGenHijing(-1); genHi->SetStack(stack); genHi->SetEnergyCMS(2760); genHi->SetReferenceFrame("CMS"); genHi->SetProjectile("A", 208, 82); genHi->SetTarget ("A", 208, 82); genHi->SetPtHardMin (2.3); genHi->SetImpactParameterRange(0.,30); genHi->SetJetQuenching(0); // enable jet quenching genHi->SetShadowing(1); // enable shadowing genHi->SetDecaysOff(1); // neutral pion and heavy particle decays switched off genHi->Init(); MyHeader *myheader = new MyHeader; MyResponse *myresp = new MyResponse; TFile *outFile = TFile::Open(outFileName, "RECREATE"); outFile->SetCompressionLevel(5); TDirectory::TContext context(outFile); TTree *tree = new TTree("glaubertree", "Glauber tree"); tree->Branch("header",&myheader, 32*1024, 99); tree->Branch("response",&myresp, 32*1024, 99); TNtuple *ntuple = new TNtuple("gnt", "Glauber ntuple", "npart:ncoll:b"); Double_t etas[] = {-10,-5,-4,-3,-2,-1,0,1,2,3,4,5,10}; TH1D *hNEta = new TH1D("hNeta","",12,etas); TH1D *hEtEta = new TH1D("hEteta","",12,etas); // create events and fill them for (Int_t iEvent = 0; iEvent < nEvents; ++iEvent) { cout << "Event " << iEvent+1 << "/" << nEvents << endl;; stack->Reset(); hNEta->Reset(); hEtEta->Reset(); genHi->Generate(); AliStack *s = genHi->GetStack(); const TObjArray *parts = s->Particles(); Int_t nents = parts->GetEntries(); for (Int_t i = 0; i<nents; ++i) { TParticle *p = (TParticle*)parts->At(i); //p->Print(); TParticlePDG *pdg = p->GetPDG(1); Int_t c = (Int_t)(TMath::Abs(pdg->Charge())); if (c!=0) { hNEta->Fill(p->Eta()); hEtEta->Fill(p->Eta(),p->Pt()); } } AliGenHijingEventHeader *h = (AliGenHijingEventHeader*)genHi->CollisionGeometry(); myheader->fNATT = nents; myheader->fEATT = h->TotalEnergy(); myheader->fJATT = h->HardScatters(); myheader->fNT = h->TargetParticipants(); myheader->fNP = h->ProjectileParticipants(); myheader->fN00 = h->NwNw(); myheader->fN01 = h->NwN(); myheader->fN10 = h->NNw(); myheader->fN11 = h->NN(); myheader->fBB = h->ImpactParameter(); myheader->fRP = h->ReactionPlaneAngle(); myheader->fPSn = h->ProjSpectatorsn(); myheader->fPSp = h->ProjSpectatorsp(); myheader->fTSn = h->TargSpectatorsn(); myheader->fTSp = h->TargSpectatorsn(); myresp->fEtch0p = hEtEta->GetBinContent(hEtEta->FindBin(0.5)); myresp->fEtch1p = hEtEta->GetBinContent(hEtEta->FindBin(1.5)); myresp->fEtch2p = hEtEta->GetBinContent(hEtEta->FindBin(2.5)); myresp->fEtch3p = hEtEta->GetBinContent(hEtEta->FindBin(3.5)); myresp->fEtch4p = hEtEta->GetBinContent(hEtEta->FindBin(4.5)); myresp->fEtch5p = hEtEta->GetBinContent(hEtEta->FindBin(5.5)); myresp->fEtchrp = hEtEta->GetBinContent(hEtEta->FindBin(10.5)); myresp->fEtch0n = hEtEta->GetBinContent(hEtEta->FindBin(-0.5)); myresp->fEtch1n = hEtEta->GetBinContent(hEtEta->FindBin(-1.5)); myresp->fEtch2n = hEtEta->GetBinContent(hEtEta->FindBin(-2.5)); myresp->fEtch3n = hEtEta->GetBinContent(hEtEta->FindBin(-3.5)); myresp->fEtch4n = hEtEta->GetBinContent(hEtEta->FindBin(-4.5)); myresp->fEtch5n = hEtEta->GetBinContent(hEtEta->FindBin(-5.5)); myresp->fEtchrn = hEtEta->GetBinContent(hEtEta->FindBin(-10.5)); myresp->fNch0p = hNEta->GetBinContent(hNEta->FindBin(0.5)); myresp->fNch1p = hNEta->GetBinContent(hNEta->FindBin(1.5)); myresp->fNch2p = hNEta->GetBinContent(hNEta->FindBin(2.5)); myresp->fNch3p = hNEta->GetBinContent(hNEta->FindBin(3.5)); myresp->fNch4p = hNEta->GetBinContent(hNEta->FindBin(4.5)); myresp->fNch5p = hNEta->GetBinContent(hNEta->FindBin(5.5)); myresp->fNchrp = hNEta->GetBinContent(hNEta->FindBin(10.5)); myresp->fNch0n = hNEta->GetBinContent(hNEta->FindBin(-0.5)); myresp->fNch1n = hNEta->GetBinContent(hNEta->FindBin(-1.5)); myresp->fNch2n = hNEta->GetBinContent(hNEta->FindBin(-2.5)); myresp->fNch3n = hNEta->GetBinContent(hNEta->FindBin(-3.5)); myresp->fNch4n = hNEta->GetBinContent(hNEta->FindBin(-4.5)); myresp->fNch5n = hNEta->GetBinContent(hNEta->FindBin(-5.5)); myresp->fNchrn = hNEta->GetBinContent(hNEta->FindBin(-10.5)); tree->Fill(); if (ntuple) { Int_t np = h->TargetParticipants() + h->ProjectileParticipants(); Int_t nc = h->NwNw() + h->NwN() + h->NNw() + h->NN(); Double_t b = h->ImpactParameter(); ntuple->Fill(np,nc,b); } } // end of event loop tree->Write(); ntuple->Write(); outFile->Close(); }