TObjArray* pTokens=allArgs.Tokenize(" ");
if (pTokens) {
for (int i=0; i<pTokens->GetEntries() && iResult>=0; i++) {
- argument=((TObjString*)pTokens->At(i))->GetString();
+ argument=((TObjString*)pTokens->At(i))->GetString();
if (argument.IsNull()) continue;
if (argument.CompareTo("-solenoidBz")==0) {
fSolenoidBz=((TObjString*)pTokens->At(i))->GetString().Atof();
continue;
}
- else if (argument.CompareTo("-fitTracks2Vertex")==0) {
+ else if (argument.CompareTo("-fitTracksToVertex")==0) {
if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
HLTInfo("Filling of vertex constrained tracks is set set to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
fFillVtxConstrainedTracks=((TObjString*)pTokens->At(i))->GetString().Atoi();
// -tree
} else if (argument.CompareTo("-tree")==0) {
fWriteTree=1;
-
+ }else if (argument.CompareTo("-fitTracksToVertex")==0) {
+ if ((bMissingParam=(++i>=argc))) break;
+ argument = argv[i];
+ HLTInfo("Filling of vertex constrained tracks is set set to: %s", argument.Data());
+ fFillVtxConstrainedTracks=argument.Atoi();
} else {
HLTError("unknown argument %s", argument.Data());
break;
AliHLTVertexer vertexer;
vertexer.SetESD( pESD );
+ vertexer.SetFillVtxConstrainedTracks( fFillVtxConstrainedTracks );
vertexer.FindPrimaryVertex();
vertexer.FindV0s();
-
- // relate the tracks to vertex
- if( fFillVtxConstrainedTracks ){
- for( Int_t i = 0; i<pESD->GetNumberOfTracks(); i++){
- if( !vertexer.TrackInfos()[i].fPrimUsedFlag ) continue;
- pESD->GetTrack(i)->RelateToVertex( pESD->GetPrimaryVertex(), fESD->GetMagneticField(),5. );
- }
- }
if (iAddedDataBlocks>0 && pTree) {
pTree->Fill();
AliHLTVertexer::AliHLTVertexer():
fESD(0),
fTrackInfos(0),
- fPrimaryVtx()
+ fPrimaryVtx(),
+ fFillVtxConstrainedTracks(1)
{
}
AliHLTVertexer::AliHLTVertexer(const AliHLTVertexer & ):
fESD(0),
fTrackInfos(0),
- fPrimaryVtx()
+ fPrimaryVtx(),
+ fFillVtxConstrainedTracks(1)
{
}
}
}
-
void AliHLTVertexer::FindPrimaryVertex( )
{
//* Find event primary vertex
Int_t nSelected = 0;
for( Int_t i = 0; i<nTracks; i++){
if(!fTrackInfos[i].fOK ) continue;
- if( fESD->GetTrack(i)->GetTPCNcls()<60 ) continue;
+ //if( fESD->GetTrack(i)->GetTPCNcls()<60 ) continue;
const AliKFParticle &p = fTrackInfos[i].fParticle;
Double_t chi = p.GetDeviationFromVertex( fPrimaryVtx );
if( chi > 3.5 ) continue;
if( fPrimaryVtx.GetNContributors()>3 ){
AliESDVertex vESD( fPrimaryVtx.Parameters(), fPrimaryVtx.CovarianceMatrix(), fPrimaryVtx.GetChi2(), fPrimaryVtx.GetNContributors() );
fESD->SetPrimaryVertexTracks( &vESD );
+
+ // relate the tracks to vertex
+
+ if( fFillVtxConstrainedTracks ){
+ for( Int_t i = 0; i<nTracks; i++ ){
+ if( !fTrackInfos[i].fPrimUsedFlag ) continue;
+ fESD->GetTrack(i)->RelateToVertex( &vESD, fESD->GetMagneticField(),100. );
+ }
+ }
+
} else {
for( Int_t i = 0; i<nTracks; i++)
fTrackInfos[i].fPrimUsedFlag = 0;
//AliKFVertex primVtx( *fESD->GetPrimaryVertexTracks() );
AliKFVertex &primVtx = fPrimaryVtx;
if( primVtx.GetNContributors()<3 ) return;
+
+ bool *constrainedV0 = new bool[nTracks];
for( Int_t iTr = 0; iTr<nTracks; iTr++ ){
AliESDTrackInfo &info = fTrackInfos[iTr];
info.fPrimDeviation = info.fParticle.GetDeviationFromVertex( primVtx );
+ constrainedV0[iTr] = 0;
}
+
for( Int_t iTr = 0; iTr<nTracks; iTr++ ){ //* first daughter
AliESDv0 v0ESD( *fESD->GetTrack( iTr ), iTr, *fESD->GetTrack( jTr ), jTr );
fESD->AddV0( &v0ESD );
+
+ // relate the tracks to vertex
+
+ if( fFillVtxConstrainedTracks ){
+ if( constrainedV0[iTr] || constrainedV0[jTr]
+ || info.fPrimDeviation < 4. || jnfo.fPrimDeviation <4. ) continue;
+ AliESDVertex vESD(v0.Parameters(), v0.CovarianceMatrix(), v0.GetChi2(), 2);
+ fESD->GetTrack(iTr)->RelateToVertex( &vESD, fESD->GetMagneticField(),100. );
+ fESD->GetTrack(jTr)->RelateToVertex( &vESD, fESD->GetMagneticField(),100. );
+ constrainedV0[iTr] = 1;
+ constrainedV0[jTr] = 1;
+ }
}
}
+ delete[] constrainedV0;
}
void SetESD( AliESDEvent *event );
void FindPrimaryVertex();
void FindV0s();
+ void SetFillVtxConstrainedTracks( bool v ){ fFillVtxConstrainedTracks = v; }
const AliESDTrackInfo *TrackInfos(){ return fTrackInfos; }
private:
AliESDEvent *fESD; // pointer to esd event
AliESDTrackInfo *fTrackInfos; // information about esd tracks
AliKFVertex fPrimaryVtx; // reconstructed KF primary vertex
+ bool fFillVtxConstrainedTracks; // flag to fill vtx constrained tracks to esd
+
ClassDef(AliHLTVertexer,0) //HLT vertex finder
};