//______________________________________________________________________________ void alice_esd_read() { // Read tracks and associated clusters from current event. AliESDRun *esdrun = (AliESDRun*) esd->fESDObjects->FindObject("AliESDRun"); TClonesArray *tracks = (TClonesArray*) esd->fESDObjects->FindObject("Tracks"); // This needs further investigation. Clusters not shown. // AliESDfriend *frnd = (AliESDfriend*) esd->fESDObjects->FindObject("AliESDfriend"); // printf("Friend %p, n_tracks:%d\n", frnd, frnd->fTracks.GetEntries()); if (track_list == 0) { track_list = new TEveTrackList("ESD Tracks"); track_list->SetMainColor(6); //track_list->SetLineWidth(2); track_list->SetMarkerColor(kYellow); track_list->SetMarkerStyle(4); track_list->SetMarkerSize(0.5); gEve->AddElement(track_list); } TEveTrackPropagator* trkProp = track_list->GetPropagator(); trkProp->SetMagField( 0.1 * esdrun->fMagneticField ); // kGaus to Tesla gProgress->Reset(); gProgress->SetMax(tracks->GetEntriesFast()); for (Int_t n=0; n<tracks->GetEntriesFast(); ++n) { AliESDtrack* at = (AliESDtrack*) tracks->At(n); // If ITS refit failed, take track parameters at inner TPC radius. AliExternalTrackParam* tp = at; if (! trackIsOn(at, kITSrefit)) { tp = at->fIp; } TEveTrack* track = esd_make_track(trkProp, n, at, tp); track->SetAttLineAttMarker(track_list); track_list->AddElement(track); // This needs further investigation. Clusters not shown. // if (frnd) // { // AliESDfriendTrack* ft = (AliESDfriendTrack*) frnd->fTracks->At(n); // printf("%d friend = %p\n", ft); // } gProgress->Increment(1); } track_list->MakeTracks(); }
void ProcessVisualize() { TEveManager::Create(); TEvePointSetArray *evp = new TEvePointSetArray("Event points", "Event points"); TEvePointSetArray *chp = new TEvePointSetArray("Chamber points", "Chamber points"); evp->SetMarkerColor(kGreen); evp->InitBins("Event cause", 8, 0.5, 8.5); chp->SetMarkerColor(kCyan); chp->InitBins("Nothing", 1, -0.5, 0.5); TEveTrackList *list = new TEveTrackList(); list->SetLineColor(kMagenta); list->SetName("Incident tracks"); TEveTrackPropagator* prop = list->GetPropagator(); prop->SetMaxR(2000); prop->SetMaxZ(4000); int j = 0; BOOST_FOREACH(event_t &e, vis_result) { evp->Fill(e.i1.x, e.i1.y, e.i1.z, e.event_cause); chp->Fill(e.inc.a(0), e.inc.a(1), e.inc.a(2), 0); chp->Fill(e.l.a(0), e.l.a(1), e.l.a(2), 0); chp->Fill(e.r.a(0), e.r.a(1), e.r.a(2), 0); if ((++j % 1000) == 0) { TEveTrack *track = make_track(e.inc, prop); track->SetLineColor(list->GetLineColor()); list->AddElement(track); track = make_track(e.l, prop); track->SetLineColor(list->GetLineColor()); list->AddElement(track); track = make_track(e.r, prop); track->SetLineColor(list->GetLineColor()); list->AddElement(track); } }
void pythia_display() { if (g_pythia != 0) { Warning("pythia_display()", "Already initialized."); return; } #ifndef G__WIN32 // libPythia6 is a static library on Windoze if (gSystem->Load("libPythia6") < 0) { Error("pythia_display()", "Could not load 'libPythia6', make sure it is available!"); return; } #endif gSystem->Load("libEGPythia6"); if (gROOT->LoadMacro("MultiView.C+") != 0) { Error("pythia_display()", "Failed loading MultiView.C in compiled mode."); return; } //======================================================================== //======================================================================== // Create an instance of the Pythia event generator ... g_pythia = new TPythia6; TPythia6& P = * g_pythia; P.SetMSEL(0); // full user controll; P.SetMSUB(102, 1); // g + g -> H0 //P.SetMSUB(123, 1); // f + f' -> f + f' + H0 //P.SetMSUB(124, 1); // f + f' -> f" + f"' + H0 P.SetPMAS(6, 1, 175); // mass of TOP P.SetPMAS(25, 1, 180); // mass of Higgs P.SetCKIN(1, 170.0); // range of allowed mass P.SetCKIN(2, 190.0); P.SetMSTP(61, 0); // switch off ISR P.SetMSTP(71, 0); // switch off FSR P.SetMSTP(81, 0); // switch off multiple interactions P.SetMSTP(111, 0); // Switch off fragmentation // Force h0 -> ZZ for (Int_t i = 210; i <= 288; ++i) P.SetMDME(i, 1, 0); P.SetMDME(225, 1, 1); // Force Z -> mumu for (Int_t i = 174; i <= 189; ++i) P.SetMDME(i, 1, 0); P.SetMDME(184, 1, 1); P.Initialize("cms", "p", "p", 14000); //======================================================================== // Create views and containers. //======================================================================== TEveManager::Create(); TEveElementList *fake_geom = new TEveElementList("Geometry"); TEveGeoShape *b; b = new TEveGeoShape("Barell 1"); b->SetShape(new TGeoTube(kR_min, kR_max, kZ_d)); b->SetMainColor(kCyan); b->SetMainTransparency(80); fake_geom->AddElement(b); b = new TEveGeoShape("Barell 2"); b->SetShape(new TGeoTube(2*kR_min, 2*kR_max, 2*kZ_d)); b->SetMainColor(kPink-3); b->SetMainTransparency(80); fake_geom->AddElement(b); gEve->AddGlobalElement(fake_geom); gMultiView = new MultiView; gMultiView->ImportGeomRPhi(fake_geom); gMultiView->ImportGeomRhoZ(fake_geom); gEve->GetBrowser()->GetTabRight()->SetTab(1); gTrackList = new TEveTrackList("Pythia Tracks"); gTrackList->SetMainColor(kYellow); gTrackList->SetMarkerColor(kRed); gTrackList->SetMarkerStyle(4); gTrackList->SetMarkerSize(0.5); gEve->AddElement(gTrackList); TEveTrackPropagator* trkProp = gTrackList->GetPropagator(); trkProp->SetMagField(kMagField); trkProp->SetMaxR(2*kR_max); trkProp->SetMaxZ(2*kZ_d); //======================================================================== //======================================================================== pythia_make_gui(); pythia_next_event(); gEve->Redraw3D(kTRUE); }
AliEveHFList* aod_HF() { Bool_t useParFiles=kFALSE; // TEveUtil::LoadMacro("$ALICE_ROOT/PWGHF/vertexingHF/macros/LoadLibraries.C+"); // LoadLibraries(useParFiles); AliAODEvent* aod = AliEveEventManager::AssertAOD(); AliESDEvent* esd = AliEveEventManager::Instance()->AssertESD(); /* gSystem->Load("libANALYSIS"); gSystem->Load("libANALYSISalice"); gSystem->Load("libCORRFW"); gSystem->Load("libPWG3base"); gSystem->Load("libPWG3vertexingHF"); */ // load MC particles TClonesArray *mcArray = (TClonesArray*) aod->FindListObject(AliAODMCParticle::StdBranchName()); if (!mcArray) { printf("MC particles branch not found!\n"); return 0; } AliAODVertex* primVtx_aod = (AliAODVertex*) aod->GetPrimaryVertex(); // AliESDVertex *primVtx_esd = (AliESDVertex*) esd->GetPrimaryVertex(); AliEveHFList* cont = new AliEveHFList("AOD HF vertices"); cont->SetMainColor(2); TEveTrackPropagator* rnrStyle = cont->GetPropagator(); rnrStyle->SetMagField( 0.1*aod->GetMagneticField() ); gEve->AddElement(cont); TEvePointSet* pointsD0toKpi = new TEvePointSet("D0->Kpi vertex locations"); // load D0->Kpi candidates TClonesArray *arrayD0toKpi = (TClonesArray*) aod->FindListObject("D0toKpi"); // load 3prong candidates // TClonesArray *array3Prong = // (TClonesArray*)aod->GetList()->FindObject("Charm3Prong"); Int_t countD0 = 0; for (Int_t iD0toKpi=0; iD0toKpi<arrayD0toKpi->GetEntriesFast(); iD0toKpi++) { AliAODRecoDecayHF2Prong *rd = (AliAODRecoDecayHF2Prong*)arrayD0toKpi->UncheckedAt(iD0toKpi); Bool_t unsetvtx=kFALSE; if (!rd->GetOwnPrimaryVtx()) { rd->SetOwnPrimaryVtx(primVtx_aod); unsetvtx=kTRUE; } // REAL D0 particle. If you want to draw only real D0 un-comment these lines //Int_t labD0 = rd->MatchToMC(421,mcArray); //if(labD0<0) continue; AliAODTrack *negAODTr = dynamic_cast<AliAODTrack *>(rd->GetDaughter(0)); AliAODTrack *posAODTr = dynamic_cast<AliAODTrack *>(rd->GetDaughter(1)); AliVVertex *secv = rd->GetSecondaryVtx(); AliESDtrack *negTr = new AliESDtrack(negAODTr); AliESDtrack *posTr = new AliESDtrack(posAODTr); negTr->PropagateToDCA((AliAODVertex*)secv,aod->GetMagneticField(),100.); posTr->PropagateToDCA((AliAODVertex*)secv,aod->GetMagneticField(),100.); AliEveHF* myD0 = aod_make_HF(rnrStyle,primVtx_aod,negTr,posTr,rd,iD0toKpi); if (myD0) { gEve->AddElement(myD0,cont); countD0++; } pointsD0toKpi->SetNextPoint(rd->Xv(),rd->Yv(),rd->Zv()); pointsD0toKpi->SetPointId(rd); if(unsetvtx) { rd->UnsetOwnPrimaryVtx(); } } //cont->SetTitle("test"); cont->MakeHFs(); gEve->Redraw3D(); pointsD0toKpi->SetTitle(Form("N=%d", pointsD0toKpi->Size())); pointsD0toKpi->SetMarkerStyle(4); pointsD0toKpi->SetMarkerSize(1.5); pointsD0toKpi->SetMarkerColor(kViolet); gEve->AddElement(pointsD0toKpi); gEve->Redraw3D(); return cont; }
TEveTrackList* kine_tracks(Double_t min_pt, Double_t min_p, Bool_t pdg_col, Bool_t recurse, Bool_t use_track_refs) { IlcRunLoader* rl = IlcEveEventManager::AssertRunLoader(); rl->LoadKinematics(); IlcStack* stack = rl->Stack(); if (!stack) { Error("kine_tracks", "can not get kinematics."); return 0; } gEve->DisableRedraw(); TEveTrackList* cont = new TEveTrackList("Kine Tracks"); cont->SetMainColor(3); TEveTrackPropagator* trkProp = cont->GetPropagator(); kine_track_propagator_setup(trkProp); gEve->AddElement(cont); Int_t count = 0; Int_t Np = stack->GetNprimary(); for (Int_t i = 0; i < Np; ++i) { TParticle* p = stack->Particle(i); if (p->GetStatusCode() <= 1) { if (p->Pt() < min_pt && p->P() < min_p) continue; ++count; IlcEveTrack* track = new IlcEveTrack(p, i, trkProp); //PH The line below is replaced waiting for a fix in Root //PH which permits to use variable siza arguments in CINT //PH on some platforms (alphalinuxgcc, solariscc5, etc.) //PH track->SetName(Form("%s [%d]", p->GetName(), i)); char form[1000]; sprintf(form,"%s [%d]", p->GetName(), i); track->SetName(form); track->SetStdTitle(); Int_t ml = p->GetMother(0); if (ml != -1) { track->SetTitle(Form("%s\nMother label=%d\nMother Pdg=%d", track->GetElementTitle(), ml, stack->Particle(ml)->GetPdgCode())); } set_track_color(track, pdg_col); gEve->AddElement(track, cont); if (recurse) kine_daughters(track, stack, min_pt, min_p, pdg_col, recurse); } } // set path marks IlcEveKineTools kt; kt.SetDaughterPathMarks(cont, stack, recurse); if (use_track_refs && rl->LoadTrackRefs() == 0) { kt.SetTrackReferences(cont, rl->TreeTR(), recurse); trkProp->SetEditPathMarks(kTRUE); } kt.SortPathMarks(cont, recurse); //PH const Text_t* tooltip = Form("min pT=%.2lf, min P=%.2lf), N=%d", min_pt, min_p, count); char tooltip[1000]; sprintf(tooltip,"min pT=%.2lf, min P=%.2lf), N=%d", min_pt, min_p, count); cont->SetTitle(tooltip); // Not broadcasted automatically ... cont->MakeTracks(recurse); gEve->EnableRedraw(); gEve->Redraw3D(); return cont; }
TEveElement* kine_track(Int_t label, Bool_t import_mother, Bool_t import_daughters, Bool_t pdg_col, Bool_t recurse, TEveElement* cont) { // Create mother and daughters tracks with given label. // mother -> particle with label // daughters -> daughters of label if (label < 0) { Warning("kine_track", "label not set."); return 0; } IlcRunLoader* rl = IlcEveEventManager::AssertRunLoader(); rl->LoadKinematics(); IlcStack* stack = rl->Stack(); if (!stack) { Warning("kine_track", "can not get kinematics."); return 0; } if (label >= stack->GetNtrack()) { Warning("kine_track", "label out of range."); return 0; } TParticle* p = stack->Particle(label); if (import_mother || (import_daughters && p->GetNDaughters())) { TEveTrackPropagator* rs = 0; if (cont == 0) { TEveTrackList* tlist = new TEveTrackList (Form("Kinematics of %d %d", label, p->GetNDaughters())); cont = tlist; TEveTrackPropagator* trkProp = tlist->GetPropagator(); kine_track_propagator_setup(trkProp); char tooltip[1000]; sprintf(tooltip,"Ndaughters=%d", p->GetNDaughters()); tlist->SetTitle(tooltip); trkProp->SetMaxOrbs(2); trkProp->SetEditPathMarks(kTRUE); gEve->AddElement(cont); rs = tlist->GetPropagator(); } else { // check if container is TEveTrackList or IlcEveTrack (has rnr-style) IlcEveTrack* t = dynamic_cast<IlcEveTrack*>(cont); if (t) { rs = t->GetPropagator(); } else { TEveTrackList* l = dynamic_cast<TEveTrackList*>(cont); if (l) rs = l->GetPropagator(); else Error("kine_tracks.C", "TrackRenderStyle not set."); } } if (import_mother) { IlcEveTrack* track = new IlcEveTrack(p, label, rs); char form[1000]; sprintf(form,"%s [%d]", p->GetName(), label); track->SetName(form); track->SetStdTitle(); set_track_color(track, pdg_col); track->MakeTrack(); gEve->AddElement(track, cont); cont = track; } if (import_daughters && p->GetNDaughters()) { for (int d=p->GetFirstDaughter(); d>0 && d<=p->GetLastDaughter(); ++d) { TParticle* dp = stack->Particle(d); IlcEveTrack* track = new IlcEveTrack(dp, d, rs); char form[1000]; sprintf(form,"%s [%d]", dp->GetName(), d); track->SetName(form); track->SetStdTitle(); set_track_color(track, pdg_col); track->MakeTrack(); gEve->AddElement(track, cont); if (recurse) kine_daughters(track, stack, 0, 0, pdg_col, recurse); } } } gEve->Redraw3D(); return cont; }