On Wed, 12 Dec 2001, Christian Holm Christensen wrote:
> > More importantly, I'd like to change the order in which it checks the BB
> > vertices - it currently looks for BbRdo first and then for BrBbVertex. I
> > guess the other way around would be more sensible since BrBbVertex is more
> > precise.
>
> That;'s easily done - just add more BrVertexFilter's. That is, do
>
> //__________________________________________________________________
> // Module: BrVertexFilter
> BrVertexFilter* vertexFilter =
> new BrVertexFilter("bbfilter", "BB vertex filter");
> vertexFilter->SetMaxZdcMaxVertexZ(50)
> vertexFilter->SetMaxBbMaxVertexZ(0)
> mainModule->AddModule(vertexFilter);
>
>
> //__________________________________________________________________
> // Module: BrVertexFilter
> BrVertexFilter* vertexFilter =
> new BrVertexFilter("bbfilter", "BB vertex filter");
> vertexFilter->SetMaxZdcMaxVertexZ(0)
> vertexFilter->SetMaxBbMaxVertexZ(50)
> mainModule->AddModule(vertexFilter);
>
> and so on. Also check out BrColsionFilter. If any specific vertex is
> set to 0 (zero) then, that vertex isn't checked. As you see, there's
> no reason to change the module/filter - all you need is to read the
> doc and/ro the code (if the doc is missing, please complain, and the
> appropiate person - in this case me - should fix it).
Eh, did you read the above? ;-) My problem is with the different vertex
measurements from the BB, not different detectors. The current code is the
following:
TString tableName("");
tableName += BrDetectorList::GetDetectorName(kBrBB);
BrBbRdo* rdoBb = (BrBbRdo*)node->GetObject(tableName.Data());
if (rdoBb)
fCurrentBbVertexZ = rdoBb->GetZ0();
else {
BrBbVertex* vtxBb = (BrBbVertex*)node->GetObject("BB Vertex");
if (!vtxBb){
if (Verbose() > kShowStop + 5)
Warning("CheckBbVertex",
"could not find Beam-Beam table '%s' in input event",
"BbRdo");
return kFALSE;
}
fCurrentBbVertexZ = vtxBb->GetZ0();
}
I.e. _first_ check for a BbRdo. If this is found then use it. If not, then
look for a BrBbVertex. If my InNode for some reason contains both (as was
the case yesterday...) then the VertexFilter automagically decides for me
which one to use. I guess another option is to have separate tests for Rdo
and brVertex objects, and yet another is to fiddle around with
switchModules and appendContainers until I get what I want, but for now I
think the easiest is to just make it look for the most precise measurement
first:
TString tableName("");
tableName += BrDetectorList::GetDetectorName(kBrBB);
BrBbVertex* vtxBb = (BrBbVertex*)node->GetObject("BB Vertex");
if (vtxBb)
fCurrentBbVertexZ = vtxBb->GetZ0();
else {
BrBbRdo* rdoBb = (BrBbRdo*)node->GetObject(tableName.Data());
if (!rdoBb) {
if (kDemandBbVertex) Stop("CheckBbVertex",
"could not find any Beam-Beam data in
input event");
if (Verbose() > kShowStop + 5)
Warning("CheckBbVertex",
"could not find Beam-Beam table '%s' in input event",
"BbRdo");
return kFALSE;
}
fCurrentBbVertexZ = rdoBb->GetZ0();
}
Also note the implementation of a kDemandBbVertex, by default set to
fFALSE, that stops the pipeline if there is no BrBbVertex or BbRdo
present.
> > Plus some minor cleanup...
>
> What are those 'minor cleanup's? Please be more precise.
Actually nothing - I saw some erraneous documentation in a prevoius
version of the code, but I see that you have corrected that already.
(When is a programmer not precise? When he hasn't yet made the changes to
his own code ;-)
Ping :-)
--
Bjorn H. Samset Phone: 22856465/92051998
PhD student, heavy ion physics Adr: Schouterrassen 6
Inst. of Physics, University of Oslo 0573 Oslo
\|/
----------------------------> -*- <-----------------------------
/|\
This archive was generated by hypermail 2b30 : Thu Dec 13 2001 - 04:20:53 EST