///////////////////////////////////////////////////////////////
//
// The TRootDSmini class can be used to copy DSPACK mini-DSTs
// into ROOT mini-DSTs data structures. It derives from
// TRootDS and provides only different implementations of
// the filling functions.
//
///////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;
// T49 includes
#include "TRootDSmini.h"
#include "T49EventRoot.h"
#include "T49VertexRoot.h"
#include "T49ParticleRoot.h"
// ROOT includes
#include "TROOT.h"
#include "TTree.h"
#include "TList.h"
#include "TClonesArray.h"
// DSPACK includes
#include "dsc_prot.h"
#include "dspack_rootds.h"
#include "na49_event_mc_str_root.h"
#include "na49_event_str_root.h"
#include "na49_mini_root.h"
#define MTL 0
#define MTR 1
ClassImp(TRootDSmini)
/*
$Log: TRootDSmini.C,v $
Revision 1.6 2005/05/20 11:24:52 cblume
Get rid of deprecated warnings
Revision 1.5 2005/04/26 18:58:14 cblume
SLC3 and rootv4 compatible version
Revision 1.4 2000/04/18 17:22:10 cblume
Adapted to new T49VertexRoot
* Revision 1.3 2000/04/13 15:20:01 cblume
* Introduced cut on GSI V0s. Rtrack info for secondary tracks only when there is no corresponding main vertex track. FillRing() and FillBeam()
*
* Revision 1.2 1999/12/20 17:19:57 cblume
* Some bug fixes in FillSecVertex
*
* Revision 1.1 1999/12/16 12:18:21 cblume
* Add TRootDSmini.C
*
*/
//______________________________________________________________________________
TRootDSmini::TRootDSmini():TRootDS()
{
//
// TRootDSmini destructor
//
}
//______________________________________________________________________________
TRootDSmini::~TRootDSmini()
{
//
// TRootDSmini destructor
//
}
//______________________________________________________________________________
Bool_t TRootDSmini::FillEvent()
{
//
// Copy event, track and vertex data from
// DSPACK mini-DSTs into ROOT NA49
// objects for the current event.
//
Int_t i;
Int_t Dummy;
Int_t TotalTracks;
Int_t num;
Char_t name[256];
mini_event_t *event_p;
mini_vertex_t *main_vtx;
vertex_t *main_vtx_fit;
mini_beam_t *beam_p;
mini_rtrack_t *rtrack_p;
mini_track_t *track_p;
mini_vertex_t *vtx_p;
const Int_t NRTrackSave = 5000;
mini_rtrack_t *rtrack_save[NRTrackSave];
T49ParticleRoot *track;
TClonesArray *PrimaryTrackArray;
TClonesArray *SecondaryTrackArray;
TObjArray *VtxList;
TObjArray *SecVtxList;
for (i = 0; i < NRTrackSave; i++) rtrack_save[i] = NULL;
event_p = (mini_event_t *) get_objects("mini_event",&Dummy);
if (event_p == NULL) {
cerr << "No mini_event_t in this event" << endl;
return kFALSE;
}
// Skip problematic events
for (Int_t iFound = 0; iFound < fSkipFound; iFound++) {
if ((event_p->n_run == fSkipRun[iFound]) &&
(event_p->n_event == fSkipEvt[iFound])) {
printf("Skip run %d, event %d.n",event_p->n_run,event_p->n_event);
return kFALSE;
}
}
if (fVerbose) {
printf("Fill mini_event_t data (%d)n",fVerbose);
}
fEvent->SetNRun(event_p->n_run);
fEvent->SetNEvent(event_p->n_event);
fEvent->SetDate(event_p->date);
fEvent->SetTime(event_p->time);
fEvent->SetTriggerMask(event_p->mask_trig);
fEvent->SetEveto(event_p->e_veto);
if (fVerbose) {
printf("No monitor_tpc_t data from DSPACK in-DSTsn");
}
if (fVerbose) {
printf("Copy main vertex positionn");
}
main_vtx = (mini_vertex_t *) get_objects("mini_vertex",&Dummy);
if (main_vtx) {
if (fVerbose) {
printf("Vertex structuren");
}
fEvent->SetVertexX(main_vtx->x);
fEvent->SetVertexY(main_vtx->y);
fEvent->SetVertexZ(main_vtx->z);
if (fVerbose) {
printf("Create T49VertexRootn");
}
T49VertexRoot *Vertex = new T49VertexRoot(kFALSE);
if (fVerbose) {
printf("Fill vertex objectn");
}
FillVertex(Vertex,main_vtx);
if (fVerbose) {
printf("Add to vertex listn");
}
if ((VtxList = fEvent->GetVertices()))
VtxList->Add(Vertex);
}
else {
printf("vertex = NULLn");
}
main_vtx_fit = (vertex_t *) get_objects("vertex_fit",&Dummy);
if (main_vtx_fit) {
if (fVerbose) {
printf("Vertex_fit structuren");
}
fEvent->SetVertexX(main_vtx_fit->x);
fEvent->SetVertexY(main_vtx_fit->y);
fEvent->SetVertexZ(main_vtx_fit->z);
if (fVerbose) {
printf("Create T49VertexRootn");
}
T49VertexRoot *Vertex = new T49VertexRoot(kFALSE);
if (fVerbose) {
printf("Fill vertex objectn");
}
TRootDS::FillVertex(Vertex,main_vtx_fit);
if (fVerbose) {
printf("Add to vertex listn");
}
if ((VtxList = fEvent->GetVertices()))
VtxList->Add(Vertex);
}
else {
printf("vertex_fit = NULLn");
}
if (fVerbose) {
sprintf(name,"event_%d_%d",fEvent->GetNRun(),fEvent->GetNEvent());
sprintf(name,"Run %d, Event %d",fEvent->GetNRun(),fEvent->GetNEvent());
printf("Event: %s - %g,%g,%gn",name
,fEvent->GetVertexX()
,fEvent->GetVertexY()
,fEvent->GetVertexZ());
}
if (fVerbose) {
printf("Copy mini_beam_t datan");
}
beam_p = event_p->beam_p;
if (!beam_p) beam_p = (mini_beam_t *) get_objects("mini_beam",&Dummy);
if (beam_p && fEvent->GetBeam()) {
fEvent->GetBeam()->SetS1(beam_p->s1);
fEvent->GetBeam()->SetS2(beam_p->s2);
fEvent->GetBeam()->SetS4(beam_p->s4);
fEvent->GetBeam()->SetV0(beam_p->v0);
fEvent->GetBeam()->SetScl(beam_p->scl);
fEvent->GetBeam()->SetBs4(beam_p->bs4);
fEvent->GetBeam()->SetBung(beam_p->bung);
fEvent->GetBeam()->SetBgated(beam_p->bgated);
fEvent->GetBeam()->SetBi(beam_p->bi);
fEvent->GetBeam()->SetTrigger(beam_p->trigger);
}
else {
printf("event_t->beam_p = %xn",(Int_t) event_p->beam_p);
}
if (fVerbose) {
printf("Copy mini_track_t datan");
}
fNumTracks = 0;
TotalTracks = 0;
if (!(PrimaryTrackArray = fEvent->GetPrimaryParticles())) {
printf("No primary TrackArray found in eventn");
}
rtrack_p = (mini_rtrack_t *) get_objects("mini_rtrack",&num);
if (fVerbose) {
printf("Found mini_rtrack_t at %x (%d tracks)n",(Int_t) rtrack_p,num);
}
for (i = 0; i < num; i++) {
track_p = rtrack_p->first_track_p;
if (fVerbose > 1) {
printf("track: %xn",(Int_t) track_p);
}
if (!track_p) {
fprintf(stderr,"track_p = NULL for %dn",i);
break;
}
vtx_p = track_p->start_vertex_p;
if (fVerbose > 1) {
printf("vtx: %xn",(Int_t) vtx_p);
}
if (!vtx_p) {
fprintf(stderr,"vtx_p = NULL for %dn",i);
break;
}
if ((track_p->pz > 0) &&
(rtrack_p->n_point > 10) &&
(track_p->iflag == 0) &&
(track_p->rtrack_p != NULL)) {
// Copy tracks attached to the main vertex
if (vtx_p->id_vtx == 0) {
if (fVerbose > 1) {
printf("Alloc T49ParticleRoot for main-vertex trackn");
}
track = new (PrimaryTrackArray->operator[](fNumTracks)) T49ParticleRoot();
track->SetLabel(fNumTracks);
if (fVerbose > 1) {
printf("Call FillTrackn");
}
FillTrack(track,track_p);
if (fVerbose > 1) {
printf("FillTrack finishedn");
}
// Save the rtrack-pointer of this index for later
if (fNumTracks < NRTrackSave) {
rtrack_save[fNumTracks] = rtrack_p;
}
else {
printf("Bondary error: fNumTracks = %d NRTrackSave = %dn"
,fNumTracks,NRTrackSave);
}
fNumTracks++;
}
}
rtrack_p++;
TotalTracks++;
}
if (fVerbose) {
printf("finished copying main-vertex tracksn");
}
// Copy the secondary vertices and the corresponding daughter tracks
if (fFillSecondary) {
if (fVerbose) {
printf("Copy V0 datan");
}
// The TClonesArray for the non-vertex tracks
if (!(SecondaryTrackArray = fEvent->GetSecondaryParticles())) {
printf("No secondary track array found in eventn");
}
// The TObjArray for the vertices
if (!(SecVtxList = fEvent->GetSecondaryVertices())) {
printf("No secondary vertex list found in eventn");
}
fNumSecTracks = 0;
fNumSecVertices = 0;
// New version of the loop to also get the pp-data
Int_t numVtx = 0;
if ((vtx_p = (mini_vertex_t *) get_objects("mini_vertex",&numVtx))) {
for (Int_t iVtx = 0; iVtx < numVtx; iVtx++) {
// Only good V0 vertices
if (CheckV0(vtx_p)) {
if (fVerbose > 1) {
printf("Create T49VertexRootn");
}
T49VertexRoot *SecVertex = new T49VertexRoot(kFALSE);
if (fVerbose > 1) {
printf("Fill secondary vertex objectn");
}
FillSecVertex(SecVertex,vtx_p);
if (fVerbose > 1) {
printf("Add to vertex listn");
}
SecVtxList->Add(SecVertex);
// Get the first daughter track
track_p = vtx_p->daughter_p;
rtrack_p = track_p->rtrack_p;
if (fVerbose > 1) {
printf("Alloc T49ParticleRoot for first daughter trackn");
}
track = new (SecondaryTrackArray->operator[](fNumSecTracks)) T49ParticleRoot();
track->SetLabel(fNumSecTracks);
if (fVerbose > 1) {
printf("Call FillSecTrack for first daughter trackn");
}
FillSecTrack(track,track_p);
if (fVerbose > 1) {
printf("FillSecTrack finishedn");
}
if (track_p->charge > 0) {
if (fVerbose > 1) {
printf("First track is positiven");
}
SecVertex->SetFirstTrackIsPositive(kTRUE);
}
else {
if (fVerbose > 1) {
printf("First track is negativen");
}
SecVertex->SetFirstTrackIsPositive(kFALSE);
}
// Save the index to the first particle in SecondaryTrackArray
SecVertex->SetSecondaryIndex(0,fNumSecTracks);
if (fVerbose > 1) {
printf("First particle index (non-vtx) = %dn",fNumSecTracks);
}
// Save the index to the first particle in PrimaryTrackArray (main-vtx fit)
for (i = 0; i < fNumTracks; i++) {
if (rtrack_p == rtrack_save[i]) {
SecVertex->SetPrimaryIndex(0,i);
if (fVerbose > 1) {
printf("First particle index (main-vtx) = %dn",i);
}
break;
}
}
fNumSecTracks++;
// Get the second daughter track
track_p = track_p->next_daughter_p;
rtrack_p = track_p->rtrack_p;
if (fVerbose > 1) {
printf("Alloc T49ParticleRoot for second daughter trackn");
}
track = new (SecondaryTrackArray->operator[](fNumSecTracks)) T49ParticleRoot();
track->SetLabel(fNumSecTracks);
if (fVerbose > 1) {
printf("Call FillSecTrack for second daughter trackn");
}
FillSecTrack(track,track_p);
if (fVerbose > 1) {
printf("FillSecTrack finishedn");
}
// Save the index to the second particle in SecondaryTrackArray
SecVertex->SetSecondaryIndex(1,fNumSecTracks);
if (fVerbose > 1) {
printf("Second particle index (non-vtx) = %dn",fNumSecTracks);
}
// Save the index to the second particle in PrimaryTrackArray (main-vtx fit)
for (i = 0; i < fNumTracks; i++) {
if (rtrack_p == rtrack_save[i]) {
SecVertex->SetPrimaryIndex(1,i);
if (fVerbose > 1) {
printf("Second particle index (main-vtx) = %dn",i);
}
break;
}
}
fNumSecTracks++;
fNumSecVertices++;
}
vtx_p++;
}
}
else {
printf("No vertices foundn");
}
if (fVerbose) {
printf("Finished copying V0 datan");
}
}
if (fVerbose) {
printf("Multiplicity: %d out of %d (%g)n"
,fNumTracks,TotalTracks,fEvent->GetEveto());
if (fFillSecondary) {
printf("Secondary vertices (tracks): %d (%d)n"
,fNumSecVertices,fNumSecTracks);
}
}
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootDSmini::CheckV0(mini_vertex_t *vtx_p)
{
//
// Defines a good V0
//
mini_rtrack_t *rtrack_p;
mini_track_t *track_p;
if (vtx_p->id_vtx != 11) return kFALSE;
// Get the first daughter track
if (!(track_p = (mini_track_t *) vtx_p->daughter_p)) {
printf("CheckV0: No first daughter trackn");
return kFALSE;
}
if (!(rtrack_p = (mini_rtrack_t *) track_p->rtrack_p)) {
printf("CheckV0: No first daughter rtrackn");
return kFALSE;
}
// Get the second daughter track
if (!(track_p = (mini_track_t *) track_p->next_daughter_p)) {
printf("CheckV0: No second daughter trackn");
return kFALSE;
}
if (!(rtrack_p = (mini_rtrack_t *) track_p->rtrack_p)) {
printf("CheckV0: No second daughter rtrackn");
return kFALSE;
}
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootDSmini::FillVertex(T49VertexRoot *vertex_out, mini_vertex_t *vertex_in)
{
//
// Copy data from mini_vertex_t structure for main vertex
// into T49VertexRoot object.
//
vertex_out->SetIflag(vertex_in->iflag);
vertex_out->SetIdDet(vertex_in->id_det);
vertex_out->SetIdVtx(vertex_in->id_vtx);
vertex_out->SetX(vertex_in->x);
vertex_out->SetY(vertex_in->y);
vertex_out->SetZ(vertex_in->z);
vertex_out->SetNTrkFit(vertex_in->n_trk_fit);
vertex_out->SetNTrkOut(vertex_in->n_trk_out);
vertex_out->SetSigX(vertex_in->sig_x);
vertex_out->SetSigY(vertex_in->sig_y);
vertex_out->SetSigZ(vertex_in->sig_z);
vertex_out->SetPchi2(vertex_in->pchi2);
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootDSmini::FillSecVertex(T49VertexRoot *vertex_out
, mini_vertex_t *vertex_in)
{
//
// Copy data from a mini_vertex_t structure for V0s into
// T49VertexRoot object.
//
mini_track_t *track1 = NULL;
mini_track_t *track2 = NULL;
mini_rtrack_t *rtrack1 = NULL;
mini_rtrack_t *rtrack2 = NULL;
mini_track_t *track1m = NULL;
mini_track_t *track2m = NULL;
mini_vertex_t *vertex1 = NULL;
mini_vertex_t *vertex2 = NULL;
Float_t px = 0;
Float_t py = 0;
Float_t pz = 0;
Float_t x = vertex_in->x;
Float_t y = vertex_in->y;
Float_t z = vertex_in->z;
Float_t zTarget = fEvent->GetVertexZ();
Float_t distTarg = z - zTarget;
// Reconstruct V0 target position
if ((track1 = (mini_track_t *) vertex_in->daughter_p) &&
(track2 = (mini_track_t *) track1->next_daughter_p)) {
px = track1->px + track2->px;
py = track1->py + track2->py;
pz = track1->pz + track2->pz;
}
if (pz > 0) {
Float_t xTarg = x - ((px / pz) * distTarg);
Float_t yTarg = y - ((py / pz) * distTarg);
vertex_out->SetXTarg(xTarg);
vertex_out->SetYTarg(yTarg);
}
else {
if (fVerbose > 0) {
printf("FillSecVertex: Vertex-pz <= 0n");
}
vertex_out->SetXTarg(0.);
vertex_out->SetYTarg(0.);
}
// Reconstruct the x-distance of the daughter tracks
// in the target plane (x1minx2)
if ((track1) &&
(track2) &&
(rtrack1 = (mini_rtrack_t *) track1->rtrack_p) &&
(rtrack2 = (mini_rtrack_t *) track2->rtrack_p) &&
(track1m = (mini_track_t *) rtrack1->first_track_p) &&
(track2m = (mini_track_t *) rtrack2->first_track_p) &&
(vertex1 = (mini_vertex_t *) track1m->start_vertex_p) &&
(vertex2 = (mini_vertex_t *) track2m->start_vertex_p) &&
(vertex1->id_vtx == 0) &&
(vertex2->id_vtx == 0)) {
Float_t x1minx2 = track1m->bx - track2m->bx;
vertex_out->SetX1minX2(x1minx2);
}
else {
if (fVerbose > 0) {
printf("FillSecVertex: No main-vertex track foundn");
}
vertex_out->SetX1minX2(0.);
}
return FillVertex(vertex_out,vertex_in);
}
//______________________________________________________________________________
Bool_t TRootDSmini::FillTrack(T49ParticleRoot *track_out, mini_track_t *track_in)
{
//
// Copy data from a mini_track_t structure into a T49ParticleRoot
// object.
//
for (Int_t i = 0; i < 4; i++) {
track_out->SetNPoint(0,i);
track_out->SetNFitPoint(0,i);
track_out->SetNDedxPoint(0,i);
track_out->SetNMaxPoint(0,i);
}
//for (Int_t i = 0; i < 3; i++) {
// track_out->SetXFirst(i,0);
// track_out->SetYFirst(i,0);
// track_out->SetZFirst(i,0);
// track_out->SetXLast(i,0);
// track_out->SetYLast(i,0);
// track_out->SetZLast(i,0);
//}
mini_rtrack_t *rtrack_in = track_in->rtrack_p;
mini_tracktof_t *toftrack_in = track_in->track_tof_p;
if (track_in) {
track_out->SetIdDet(track_in->id_det);
track_out->SetPx(track_in->px);
track_out->SetPy(track_in->py);
track_out->SetPz(track_in->pz);
track_out->SetSigPx(track_in->sig_px);
track_out->SetSigPy(track_in->sig_py);
track_out->SetSigPz(track_in->sig_pz);
track_out->SetBx(track_in->bx);
track_out->SetBy(track_in->by);
track_out->SetPchi2(track_in->pchi2);
track_out->SetCharge(((Int_t) track_in->charge));
track_out->SetIflag(track_in->iflag);
if (rtrack_in) {
track_out->SetNPoint((rtrack_in->n_point & 0xFF000000) / 0x01000000,0);
track_out->SetNPoint((rtrack_in->n_point & 0x00FF0000) / 0x00010000,1);
track_out->SetNPoint((rtrack_in->n_point & 0x0000FF00) / 0x00000100,2);
track_out->SetNPoint((rtrack_in->n_point & 0x000000FF) / 0x00000001 );
track_out->SetNDedxPoint((rtrack_in->n_dedx_point & 0xFF000000) / 0x01000000,0);
track_out->SetNDedxPoint((rtrack_in->n_dedx_point & 0x00FF0000) / 0x00010000,1);
track_out->SetNDedxPoint((rtrack_in->n_dedx_point & 0x0000FF00) / 0x00000100,2);
track_out->SetNDedxPoint((rtrack_in->n_dedx_point & 0x000000FF) / 0x00000001 );
track_out->SetNMaxPoint((rtrack_in->n_max_point & 0xFF000000) / 0x01000000,0);
track_out->SetNMaxPoint((rtrack_in->n_max_point & 0x00FF0000) / 0x00010000,1);
track_out->SetNMaxPoint((rtrack_in->n_max_point & 0x0000FF00) / 0x00000100,2);
track_out->SetNMaxPoint((rtrack_in->n_max_point & 0x000000FF) / 0x00000001 );
//track_out->SetNFitPoint(0,0);
//track_out->SetNFitPoint(0,1);
//track_out->SetNFitPoint(0,2);
//track_out->SetNFitPoint(0, );
track_out->SetXFirst(rtrack_in->x);
track_out->SetYFirst(rtrack_in->y);
track_out->SetZFirst(rtrack_in->z);
track_out->SetXLast(rtrack_in->x_last);
track_out->SetYLast(rtrack_in->y_last);
track_out->SetZLast(rtrack_in->z_last);
track_out->SetTmeanCharge(rtrack_in->tmean_charge[0],0);
track_out->SetTmeanCharge(rtrack_in->tmean_charge[1],1);
track_out->SetTmeanCharge(rtrack_in->tmean_charge[2],2);
track_out->SetTmeanCharge(rtrack_in->tmean_charge[3] );
}
if (toftrack_in) {
track_out->SetTofX(toftrack_in->x);
track_out->SetTofY(toftrack_in->y);
track_out->SetTofCharge(toftrack_in->charge);
track_out->SetTofPathl(toftrack_in->pathl);
track_out->SetTofMass2(toftrack_in->mass2);
track_out->SetTofSigMass2(toftrack_in->sig_mass2);
track_out->SetTofId(toftrack_in->id);
track_out->SetTofIflag(toftrack_in->iflag);
}
else {
track_out->SetTofX(0);
track_out->SetTofY(0);
track_out->SetTofCharge(0);
track_out->SetTofPathl(0);
track_out->SetTofMass2(0);
track_out->SetTofSigMass2(0);
track_out->SetTofId(0);
track_out->SetTofIflag(0);
}
//track_out->SetWeight(1);
//track_out->SetRandom();
}
if (fVerbose > 1) {
printf("p = %g %g %gn",track_out->GetPx()
,track_out->GetPy()
,track_out->GetPz());
for (Int_t i = 0; i < 4; i++) {
printf("%d: %d %d %dn"
,i,track_out->GetNPoint(i)
,track_out->GetNFitPoint(i)
,track_out->GetNMaxPoint(i));
}
}
return kTRUE;
}
//______________________________________________________________________________
Bool_t TRootDSmini::FillSecTrack(T49ParticleRoot *track_out, mini_track_t *track_in)
{
//
// Copy data from a mini_track_t structure into a T49ParticleRoot
// object for secondary tracks (reduced information)
//
mini_rtrack_t *rtrack_in = track_in->rtrack_p;
// No dE/dx information for secondary tracks
for (Int_t i = 0; i < 4; i++) {
track_out->SetNPoint(0,i);
track_out->SetNFitPoint(0,i);
track_out->SetNDedxPoint(0,i);
track_out->SetNMaxPoint(0,i);
track_out->SetTmeanCharge(0,i);
}
//for (Int_t i = 0; i < 3; i++) {
// track_out->SetXFirst(i,0.);
// track_out->SetYFirst(i,0.);
// track_out->SetZFirst(i,0.);
//}
if (track_in) {
// Fill the track_t information
track_out->SetIdDet(track_in->id_det);
track_out->SetPx(track_in->px);
track_out->SetPy(track_in->py);
track_out->SetPz(track_in->pz);
track_out->SetSigPx(track_in->sig_px);
track_out->SetSigPy(track_in->sig_py);
track_out->SetSigPz(track_in->sig_pz);
track_out->SetBx(track_in->bx);
track_out->SetBy(track_in->by);
track_out->SetPchi2(track_in->pchi2);
track_out->SetCharge(((Int_t) track_in->charge));
track_out->SetIflag(track_in->iflag);
// Fill the rtrack_t information
if (rtrack_in) {
track_out->SetXFirst(rtrack_in->x);
track_out->SetYFirst(rtrack_in->y);
track_out->SetZFirst(rtrack_in->z);
track_out->SetXLast(rtrack_in->x_last);
track_out->SetYLast(rtrack_in->y_last);
track_out->SetZLast(rtrack_in->z_last);
track_out->SetNPoint((rtrack_in->n_point & 0x000000FF) / 0x00000001);
track_out->SetNMaxPoint((rtrack_in->n_max_point & 0x000000FF) / 0x00000001);
}
// No TOF information for the secondary tracks
track_out->SetTofX(0);
track_out->SetTofY(0);
track_out->SetTofCharge(0);
track_out->SetTofPathl(0);
track_out->SetTofMass2(0);
track_out->SetTofSigMass2(0);
track_out->SetTofId(0);
track_out->SetTofIflag(0);
//track_out->SetWeight(1);
//track_out->SetRandom();
}
if (fVerbose > 1) {
printf("p = %g %g %gn",track_out->GetPx()
,track_out->GetPy()
,track_out->GetPz());
}
return kTRUE;
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.