Home » Hades » Pluto » [SOLVED] PVertexFile
[SOLVED] PVertexFile [message #13599] |
Wed, 13 June 2012 23:01 |
Michael Kunkel
Messages: 53 Registered: June 2011
|
continuous participant |
From: 129.57.114*
|
|
Greetings,
I had a question on the format of PVertexFile.
Is it one leaf of array vX:vY:vZ, or seperate leafs?
I ask because I am trying to smear vertices along a target that is 400mm in length and 20mm in radius.
I create a uniform distribution of 50M events of a cylinder equally the dimensions mentioned, called vertex.root with separate leaves vX, vY, vZ, tree name "vertex" as prescribed in
http://www-linux.gsi.de/~hadeshyp/pluto/v5.40/PVertexFile.html
When I attempt to use this
//#include "loadPluto.h";
//Program to generate multiple PLUTO root file
//Author Michael C. Kunkel
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"
#include "TChain.h"
#include "TCanvas.h"
#include "TF1.h"
#include "/w/hallb/clasg12/mkunkel/PLUTO/pluto_v5.40/src/PParticle.h"
#include "/w/hallb/clasg12/mkunkel/PLUTO/pluto_v5.40/src/PReaction.h"
#include "/w/hallb/clasg12/mkunkel/PLUTO/pluto_v5.40/src/PBeamSmearing.h"
#include "/w/hallb/clasg12/mkunkel/PLUTO/pluto_v5.40/src/PVertexFile.h"
void Vertex_Simulation(){
gROOT->Reset();
char nam1[60] = "/volatile/clas/clasg12/mkunkel/GG_ETA_SIM/PLUTO_GEN/eta_";
char nam2[25] = "_gammagamma_vertex";
for(int ij = 1; ij<=1; ij++){
char c[10];
sprintf(c,"%d",ij);
char creater[75];
sprintf(creater,"%s%s%s",nam1,c,nam2);
cout << creater<<endl;
double ebeam_min = 1.1725;
double ebeam_max = 5.44575;
PBeamSmearing *beam_smear = new PBeamSmearing("beam_smear", "Beam smearing");
TF1* beam_smear_fn = new TF1("beam_smear_fn", "1./x", ebeam_min, ebeam_max);
beam_smear->SetReaction("g + p");
beam_smear->SetMomentumFunction(beam_smear_fn);
makeDistributionManager()->Add(beam_smear);
PReaction my_reaction("_P1 = 2.2","g","p","p eta [g g]",creater,1,0,1,0);
//Construct the vertex container:
PVertexFile *vertex = new PVertexFile();
vertex->OpenFile("/w/hallb/clasg12/mkunkel/PLUTO/ETA_GAMMAGAMMA_SIM/VERTICES/vertex.root");
//add to prologue action
my_reaction.AddPrologueBulk(vertex);
// my_reaction.Print(); //The "Print()" statement is optional
my_reaction.Loop(50000);
}
}
I receive a segmentation fault, if I remove the vertex the code runs correctly.
[Updated on: Wed, 22 May 2013 12:45] by Moderator Report message to a moderator
|
|
|
|
Re: PVertexFile [message #13608 is a reply to message #13603] |
Fri, 15 June 2012 12:45 |
Ingo Froehlich
Messages: 167 Registered: March 2004 Location: IKF - Frankfurt
|
first-grade participant |
From: *x-matter.uni-frankfurt.de
|
|
Dear Michael,
just for testing I have created a small script for generating the vertex events as follows:
TFile *f = new TFile("Vertex.root", "RECREATE");
TNtuple *ntuple = new TNtuple("vertex", "Vertex data", "vx:vy:vz");
PReaction my_reaction;
my_reaction.Do("vz = sampleFlat() * 400 - 200;");
my_reaction.Do("loop: vx = sampleFlat() * 20 - 10; vy = sampleFlat() * 20 - 10; ");
my_reaction.Do("if ((vx*vx + vy*vy) > 100); goto loop");
my_reaction.Output(ntuple);
cout << my_reaction.Loop(10000) << " vertex events created" << endl;
f->cd();
ntuple->Write();
f->Close();
At least running a part of your script:
PReaction my_reaction("_P1 = 2.2","g","p","p eta [g g]","delme",1,0,1,0);
//Construct the vertex container:
PVertexFile *vertex = new PVertexFile();
vertex->OpenFile("Vertex.root");
//add to prologue action
my_reaction.AddPrologueBulk(vertex);
// my_reaction.Print(); //The "Print()" statement is optional
my_reaction.Loop(10000);
seems to work for me...
--
Ingo Froehlich
IKF - University of Frankfurt
069-798-47027, FAX: -47024
|
|
|
Re: PVertexFile [message #13609 is a reply to message #13603] |
Fri, 15 June 2012 12:51 |
Ingo Froehlich
Messages: 167 Registered: March 2004 Location: IKF - Frankfurt
|
first-grade participant |
From: *x-matter.uni-frankfurt.de
|
|
Just for additional info:
one can of course combine the scripts and access the vertex info directly via the variables _event_vertex_*:
PReaction my_reaction("_P1 = 2.2","g","p","p eta [g g]","delme",1,0,1,0);
my_reaction.Do("vz = sampleFlat() * 400 - 200;");
my_reaction.Do("loop: vx = sampleFlat() * 20 - 10; vy = sampleFlat() * 20 - 10; ");
my_reaction.Do("if ((vx*vx + vy*vy) > 100); goto loop");
my_reaction.Do("_event_vertex_x=vx; _event_vertex_y=vy; _event_vertex_z=vz; ");
my_reaction.Loop(10000);
--
Ingo Froehlich
IKF - University of Frankfurt
069-798-47027, FAX: -47024
|
|
|
|
Re: PVertexFile [message #13614 is a reply to message #13613] |
Fri, 15 June 2012 13:50 |
Ingo Froehlich
Messages: 167 Registered: March 2004 Location: IKF - Frankfurt
|
first-grade participant |
From: *x-matter.uni-frankfurt.de
|
|
I also had to search, and found in PParticle.h that it should be in mm
--
Ingo Froehlich
IKF - University of Frankfurt
069-798-47027, FAX: -47024
|
|
|
|
|
Goto Forum:
Current Time: Tue Dec 03 19:23:19 CET 2024
Total time taken to generate the page: 0.00605 seconds
|