void JointsTree::setup(ofxBox2d* _box2d, float x, float y) { box2d = _box2d; m_world = box2d->getWorld(); createChain(x, y); }
void BillboardLine::setupChains() { uint32_t total_points = max_points_per_line_ * num_lines_; uint32_t num_chains = total_points / MAX_ELEMENTS; if (total_points % MAX_ELEMENTS != 0) { ++num_chains; } for (uint32_t i = chains_.size(); i < num_chains; ++i) { createChain(); } lines_per_chain_ = MAX_ELEMENTS / max_points_per_line_; V_Chain::iterator it = chains_.begin(); V_Chain::iterator end = chains_.end(); for (;it != end; ++it) { (*it)->setMaxChainElements(max_points_per_line_); // shorten the number of chains in the last bbchain, to avoid memory wasteage if (it + 1 == end) { uint32_t lines_left = num_lines_ % lines_per_chain_; (*it)->setNumberOfChains(lines_left); } else { (*it)->setNumberOfChains(lines_per_chain_); } } }
// Set up PhysX void InitializePhysX() { gFoundation = PxCreateFoundation(PX_FOUNDATION_VERSION, gAllocator, gErrorCallback); gPvd = PxCreatePvd(*gFoundation); PxPvdTransport* transport = PxDefaultPvdSocketTransportCreate("127.0.0.1", 5425, 10); gPvd->connect(*transport, PxPvdInstrumentationFlag::eALL); gPhysics = PxCreatePhysics(PX_PHYSICS_VERSION, *gFoundation, PxTolerancesScale(), true, gPvd); PxSceneDesc sceneDesc(gPhysics->getTolerancesScale()); sceneDesc.gravity = PxVec3(0.0f, -9.81f, 0.0f); gDispatcher = PxDefaultCpuDispatcherCreate(2); sceneDesc.cpuDispatcher = gDispatcher; sceneDesc.filterShader = contactReportFilterShader/*PxDefaultSimulationFilterShader*/; sceneDesc.simulationEventCallback = &gContactReportCallback; // contact callback sceneDesc.contactModifyCallback = &gModContactReportCallback; // modification contact callback gScene = gPhysics->createScene(sceneDesc); PxPvdSceneClient* pvdClient = gScene->getScenePvdClient(); if (pvdClient) { pvdClient->setScenePvdFlag(PxPvdSceneFlag::eTRANSMIT_CONSTRAINTS, true); pvdClient->setScenePvdFlag(PxPvdSceneFlag::eTRANSMIT_CONTACTS, true); pvdClient->setScenePvdFlag(PxPvdSceneFlag::eTRANSMIT_SCENEQUERIES, true); } gMaterial = gPhysics->createMaterial(0.5f, 0.5f, 0.6f); // add some physics objects AddPhyObjects(); createChain(PxTransform(PxVec3(10.0f, 30.0f, -30.0f)), 5, PxBoxGeometry(2.0f, 0.5f, 0.5f), 4.0f, createLimitedSpherical); createChain(PxTransform(PxVec3(0.0f, 30.0f, -30.0f)), 5, PxBoxGeometry(2.0f, 0.5f, 0.5f), 4.0f, createBreakableFixed); createChain(PxTransform(PxVec3(-10.0f, 30.0f, -30.0f)), 5, PxBoxGeometry(2.0f, 0.5f, 0.5f), 4.0f, createDampedD6); gScene->setVisualizationParameter(PxVisualizationParameter::eSCALE, 1.0f); gScene->setVisualizationParameter(PxVisualizationParameter::eACTOR_AXES, 1.0f); gScene->setVisualizationParameter(PxVisualizationParameter::eCOLLISION_SHAPES, 2.0f); gScene->setVisualizationParameter(PxVisualizationParameter::eCONTACT_NORMAL, 2.0f); }
void QChain::setVertices(const std::vector<QPointF> &v) { m_vertices = v; createChain(); }
int main(int argc, char* argv[]) { TFile* file = new TFile("neutrons.root", "recreate"); TChain* chain = createChain(argc, argv); // Assign addresses double target_charge, veto_charge, target_cb, veto_cb; unsigned long long time; chain->SetBranchAddress("target_total", &target_charge); chain->SetBranchAddress("veto_total", &veto_charge); chain->SetBranchAddress("target_cb", &target_cb); chain->SetBranchAddress("veto_cb", &veto_cb); chain->SetBranchAddress("time", &time); const int chainEntries = chain->GetEntries(); const double adc2us = 4/1000.0; const int maxCharge = 30000; TH1F* histogram = new TH1F("timing", "timing", 2000, 0, 2000); TH1F* neutrons = new TH1F("nspec", "neutron spectrum", 200, 0, maxCharge); TH1F* hydrogen = new TH1F("nhspec", "capture on hydrogen", 200, 0, maxCharge); TH1F* externals = new TH1F("externspec", "externals", 200, 0, maxCharge); TH1F* tsa_neutrons = new TH1F("tsa_spec", "neutron spectrum from tsa plot", 200, 0, maxCharge); TH1I* multiplicity = new TH1I("mult", "Event multiplicity", 20, 0, 20); unsigned long long t1=0; unsigned long long t2=0; unsigned long long t3=0; // cuts const double max_target_cb = 0.5; const double max_veto_charge = 500; const double min_target_charge = 0; const double tale_min = 800; const double tale_max = 2000; const double neutrons_min = 0; const double neutrons_time = 50; const double hydro_min = 100; const double hydro_max = 150; double previous_charge = 0; // TSA Plots const int nbins = 100; double logmin = -0.3; double logmax = 4.5; double binwidth = (logmax-logmin)/double(nbins); double bin_array[nbins+1]; bin_array[0]=std::pow(10, logmin); for(int i=1; i<=nbins; i++) bin_array[i]=bin_array[0]+std::pow(10,logmin + i*binwidth); TH2F* tsa = new TH2F("tsa", "time series analysis", nbins, bin_array, nbins, bin_array); // Keep track of timing in order to get multiplicity std::vector<unsigned long long> time_vec; time_vec.resize(1, 0); for(int evt=0; evt<chainEntries; ++evt) { // Print out progress if(!(evt%1000)) std::cout << std::floor(double(evt)/chainEntries*100) << "%\r"; previous_charge = target_charge; chain->GetEvent(evt); if(veto_charge<max_veto_charge && target_charge>min_target_charge && target_cb < max_target_cb ) { t3=t2; t2=t1; t1=time; double d12 = (t1-t2)*adc2us; double d23 = (t2-t3)*adc2us; tsa->Fill(d23, d12); if((time-time_vec[0])*adc2us < 50) time_vec.push_back(time); else { multiplicity->Fill(time_vec.size()); time_vec.clear(); time_vec.push_back(time); } histogram->Fill(d12); if(d12 < neutrons_time && d12 > neutrons_min) neutrons->Fill(target_charge); if(d12 < tale_max && d12 > tale_min) externals->Fill(target_charge); if(d12 < hydro_max && d12 > hydro_min) hydrogen->Fill(target_charge); if(d12 < neutrons_time && d23 < neutrons_time) tsa_neutrons->Fill(previous_charge); } } std::cout << std::endl; // Events in tale: TF1* fitter_extern = new TF1("fitter_extern", "[0]*TMath::Exp([1]*x)", 0, 2000); fitter_extern->SetParameters(1000, -4e-4); histogram->Fit(fitter_extern, "QO", "", tale_min, tale_max); TF1* fitter_h = new TF1("fitter_h", "[0]*TMath::Exp([1]*x)", 0, 2000); fitter_h->SetParameters(1000, -4e-3); histogram->Fit(fitter_h, "QO+", "", hydro_min, hydro_max); int tale_events = fitter_extern->Integral(tale_min, tale_max); int bkg_events = fitter_extern->Integral(neutrons_min, neutrons_time); int h_long_events = fitter_h->Integral(hydro_min, hydro_max); int h_short_events = fitter_h->Integral(neutrons_min, neutrons_time); double talebkgratio = bkg_events / double(tale_events); externals->Scale(talebkgratio); double h_ratio = h_short_events / h_long_events; hydrogen->Scale(h_ratio); TH1F* pureNeutrons = new TH1F("pureNeutrons", "pureNeutrons", 200, 0, maxCharge); for(int i=0; i<neutrons->GetNbinsX(); i++) pureNeutrons->SetBinContent(i, neutrons->GetBinContent(i) - externals->GetBinContent(i) - hydrogen->GetBinContent(i)); file->Write(); std::cout << "Wrote histograms to neutrons.root" << std::endl; // TRint* app = new TRint("EVIL", &argc, argv); // TCanvas* c1 = new TCanvas(); //c1->Divide(1,2); //c1->cd(1); //histogram->Draw(); //fitter_h->Draw("same"); //fitter_extern->Draw("same"); //c1->cd(2); // externals->SetLineColor(kBlack); // neutrons->SetLineColor(kGreen); // pureNeutrons->SetLineColor(kRed); // hydrogen->SetLineColor(kBlue); // neutrons->Draw(); // externals->Draw("same"); // hydrogen->Draw("same"); // pureNeutrons->Draw("same"); //app->Run(); delete histogram; delete externals; delete neutrons; delete pureNeutrons; //delete c1; delete chain; delete file; return 0; }
void createTrees() { for (Int_t i = 0; i < noChains; i++) createChain(chainNames[i], chainConstatns[i]); }