#include <TChain.h>
#include <TFile.h>
#include <TArrayI.h>
+#include <TRandom.h>
#include "AliAnalysisTaskESDfilter.h"
#include "AliAnalysisManager.h"
#include "AliESDInputHandler.h"
#include "AliAODHandler.h"
#include "AliAnalysisFilter.h"
-#include "AliESDtrack.h"
#include "AliESDMuonTrack.h"
#include "AliESDVertex.h"
#include "AliESDv0.h"
AliAnalysisTaskSE(),
fTrackFilter(0x0),
fKinkFilter(0x0),
- fV0Filter(0x0)
+ fV0Filter(0x0),
+ fHighPthreshold(0),
+ fPtshape(0x0)
{
// Default constructor
}
AliAnalysisTaskSE(name),
fTrackFilter(0x0),
fKinkFilter(0x0),
- fV0Filter(0x0)
+ fV0Filter(0x0),
+ fHighPthreshold(0),
+ fPtshape(0x0)
{
// Constructor
}
//
Long64_t ientry = Entry();
- printf("Filter: Analysing event # %5d\n", (Int_t) ientry);
-
+ if (fDebug > 0) printf("Filter: Analysing event # %5d\n", (Int_t) ientry);
+ if (fHighPthreshold == 0) AliInfo("detector PID signals are stored in each track");
+ if (!fPtshape) AliInfo("detector PID signals are not stored below the pt threshold");
ConvertESDtoAOD();
}
Double_t p[3];
Double_t p_pos[3];
Double_t p_neg[3];
+ Double_t p_pos_atv0[3];
+ Double_t p_neg_atv0[3];
Double_t covVtx[6];
Double_t covTr[21];
Double_t pid[10];
// Multiplicity information needed by the header (to be revised!)
Int_t nTracks = esd->GetNumberOfTracks();
+ // if (fDebug > 0) printf("-------------------Bo: Number of ESD tracks %d \n",nTracks);
+
Int_t nPosTracks = 0;
- for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack)
- if (esd->GetTrack(iTrack)->GetSign()> 0) nPosTracks++;
+// for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack)
+// if (esd->GetTrack(iTrack)->GetSign()> 0) nPosTracks++;
// Update the header
header->SetZDCN2Energy(esd->GetZDCN2Energy());
header->SetZDCP2Energy(esd->GetZDCP2Energy());
header->SetZDCEMEnergy(esd->GetZDCEMEnergy(0),esd->GetZDCEMEnergy(1));
- header->SetRefMultiplicity(nTracks);
- header->SetRefMultiplicityPos(nPosTracks);
- header->SetRefMultiplicityNeg(nTracks - nPosTracks);
//
//
Int_t nV0s = esd->GetNumberOfV0s();
Int_t nFmdClus = 0;
Int_t nPmdClus = esd->GetNumberOfPmdTracks();
- printf(" NV0=%d NCASCADES=%d NKINKS=%d\n", nV0s, nCascades, nKinks);
+ if (fDebug > 0)
+ printf(" NV0=%d NCASCADES=%d NKINKS=%d\n", nV0s, nCascades, nKinks);
AODEvent()->ResetStd(nTracks, nVertices, nV0s+nCascades, nJets, nCaloClus, nFmdClus, nPmdClus);
AliAODTrack *aodTrack = 0x0;
-
+ AliAODPid *detpid = 0x0;
+ Double_t timezero = 0; //TO BE FIXED
+ AliAODv0 *aodV0 = 0x0;
+
+ // RefArray to take into account the tracks associated to V0s
+ TRefArray *v0DaughterTracks = NULL;
+ if (nTracks>0) v0DaughterTracks = new TRefArray(nTracks);
+
// Array to take into account the tracks already added to the AOD
Bool_t * usedTrack = NULL;
if (nTracks>0) {
vtx->GetCovMatrix(covVtx); //covariance matrix
AliAODVertex * primary = new(vertices[jVertices++])
- AliAODVertex(pos, covVtx, vtx->GetChi2toNDF(), NULL, AliAODVertex::kPrimary);
- primary->Print();
+ AliAODVertex(pos, covVtx, vtx->GetChi2toNDF(), NULL, -1, AliAODVertex::kPrimary);
+ if (fDebug > 0) primary->Print();
// Create vertices starting from the most complex objects
Double_t chi2 = 0.;
kFALSE, // check if this is right
AliAODTrack::kSecondary)
);
+ if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdTrack->GetStatus());
+ SetAODPID(esdTrack,aodTrack,detpid,timezero);
}
else {
// cerr << "Error: event " << esd->GetEventNumberInFile() << " cascade " << nCascade
kFALSE, // check if this is right
AliAODTrack::kSecondary)
);
+ if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdTrack->GetStatus());
+ SetAODPID(esdTrack,aodTrack,detpid,timezero);
}
else {
// cerr << "Error: event " << esd->GetEventNumberInFile() << " cascade " << nCascade
kFALSE, // check if this is right
AliAODTrack::kSecondary)
);
+ if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdTrack->GetStatus());
+ SetAODPID(esdTrack,aodTrack,detpid,timezero);
}
else {
// cerr << "Error: event " << esd->GetEventNumberInFile() << " cascade " << nCascade
for (Int_t nV0 = 0; nV0 < nV0s; ++nV0) {
- if (usedV0[nV0]) continue; // skip if aready added to the AOD
+ if (usedV0[nV0]) continue; // skip if already added to the AOD
AliESDv0 *v0 = esd->GetV0(nV0);
Int_t posFromV0 = v0->GetPindex();
Int_t negFromV0 = v0->GetNindex();
+
+ Float_t dcaPosToPrimVertexXYZ[2] = { 999., 999.}; // ..[0] = in XY plane and ..[1] = in Z
+ Float_t dcaNegToPrimVertexXYZ[2] = { 999., 999.}; // ..[0] = in XY plane and ..[1] = in Z
+ Double_t dcaDaughterToPrimVertex[2] = { 999., 999.}; // ..[0] = Pos and ..[1] = Neg
+ Double_t dcaV0Daughters = v0->GetDcaV0Daughters();
+ Double_t dcaV0ToPrimVertex = v0->GetD();
+
+ v0->GetPPxPyPz(p_pos_atv0[0],p_pos_atv0[1],p_pos_atv0[2]);
+ v0->GetNPxPyPz(p_neg_atv0[0],p_neg_atv0[1],p_neg_atv0[2]);
+
// Add the positive tracks from the V0
- if (posFromV0>-1 && !usedTrack[posFromV0]) {
-
+ if (posFromV0>-1){
+ AliESDtrack *esdTrack = esd->GetTrack(posFromV0);
+ esdTrack->GetPxPyPz(p_pos);
+ esdTrack->GetXYZ(pos);
+ esdTrack->GetCovarianceXYZPxPyPz(covTr);
+ esdTrack->GetESDpid(pid);
+ esdTrack->GetImpactParameters(dcaPosToPrimVertexXYZ[0],dcaPosToPrimVertexXYZ[1]);
+ if (!usedTrack[posFromV0]) {
usedTrack[posFromV0] = kTRUE;
-
- AliESDtrack *esdTrack = esd->GetTrack(posFromV0);
- esdTrack->GetPxPyPz(p_pos);
- esdTrack->GetXYZ(pos);
- esdTrack->GetCovarianceXYZPxPyPz(covTr);
- esdTrack->GetESDpid(pid);
-
- vV0->AddDaughter(aodTrack =
- new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
- esdTrack->GetLabel(),
- p_pos,
- kTRUE,
- pos,
- kFALSE,
- covTr,
- (Short_t)esdTrack->GetSign(),
- esdTrack->GetITSClusterMap(),
- pid,
- vV0,
- kTRUE, // check if this is right
- kFALSE, // check if this is right
- AliAODTrack::kSecondary)
- );
+ aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
+ esdTrack->GetLabel(),
+ p_pos,
+ kTRUE,
+ pos,
+ kFALSE,
+ covTr,
+ (Short_t)esdTrack->GetSign(),
+ esdTrack->GetITSClusterMap(),
+ pid,
+ vV0,
+ kTRUE, // check if this is right
+ kFALSE, // check if this is right
+ AliAODTrack::kSecondary);
+ v0DaughterTracks->AddAt(aodTrack,posFromV0);
+ // if (fDebug > 0) printf("-------------------Bo: pos track from original pt %.3f \n",aodTrack->Pt());
+ if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdTrack->GetStatus());
- }
- else {
-// cerr << "Error: event " << esd->GetEventNumberInFile() << " V0 " << nV0
-// << " track " << posFromV0 << " has already been used!" << endl;
+ SetAODPID(esdTrack,aodTrack,detpid,timezero);
+ }
+ else {
+ aodTrack = dynamic_cast<AliAODTrack*>(v0DaughterTracks->At(posFromV0));
+ // if (fDebug > 0) printf("-------------------Bo pos track from refArray pt %.3f \n",aodTrack->Pt());
+ }
+ vV0->AddDaughter(aodTrack);
}
// Add the negative tracks from the V0
- if (negFromV0>-1 && !usedTrack[negFromV0]) {
-
+ if (negFromV0>-1){
+ AliESDtrack *esdTrack = esd->GetTrack(negFromV0);
+ esdTrack->GetPxPyPz(p_neg);
+ esdTrack->GetXYZ(pos);
+ esdTrack->GetCovarianceXYZPxPyPz(covTr);
+ esdTrack->GetESDpid(pid);
+ esdTrack->GetImpactParameters(dcaNegToPrimVertexXYZ[0],dcaNegToPrimVertexXYZ[1]);
+
+ if (!usedTrack[negFromV0]) {
usedTrack[negFromV0] = kTRUE;
-
- AliESDtrack *esdTrack = esd->GetTrack(negFromV0);
- esdTrack->GetPxPyPz(p_neg);
- esdTrack->GetXYZ(pos);
- esdTrack->GetCovarianceXYZPxPyPz(covTr);
- esdTrack->GetESDpid(pid);
-
- vV0->AddDaughter(aodTrack =
- new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
- esdTrack->GetLabel(),
- p_neg,
- kTRUE,
- pos,
- kFALSE,
- covTr,
- (Short_t)esdTrack->GetSign(),
- esdTrack->GetITSClusterMap(),
- pid,
- vV0,
- kTRUE, // check if this is right
- kFALSE, // check if this is right
- AliAODTrack::kSecondary)
- );
+ aodTrack = new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
+ esdTrack->GetLabel(),
+ p_neg,
+ kTRUE,
+ pos,
+ kFALSE,
+ covTr,
+ (Short_t)esdTrack->GetSign(),
+ esdTrack->GetITSClusterMap(),
+ pid,
+ vV0,
+ kTRUE, // check if this is right
+ kFALSE, // check if this is right
+ AliAODTrack::kSecondary);
+
+ v0DaughterTracks->AddAt(aodTrack,negFromV0);
+ // if (fDebug > 0) printf("-------------------Bo: neg track from original pt %.3f \n",aodTrack->Pt());
+ if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->ConvertAliPIDtoAODPID();
aodTrack->SetFlags(esdTrack->GetStatus());
+ SetAODPID(esdTrack,aodTrack,detpid,timezero);
+ }
+ else {
+ aodTrack = dynamic_cast<AliAODTrack*>(v0DaughterTracks->At(negFromV0));
+ // if (fDebug > 0) printf("-------------------Bo neg track from refArray pt %.3f \n",aodTrack->Pt());
+ }
+ vV0->AddDaughter(aodTrack);
}
- else {
-// cerr << "Error: event " << esd->GetEventNumberInFile() << " V0 " << nV0
-// << " track " << negFromV0 << " has already been used!" << endl;
- }
-
+ dcaDaughterToPrimVertex[0] =
+ TMath::Sqrt(dcaPosToPrimVertexXYZ[0]*dcaPosToPrimVertexXYZ[0]
+ +dcaPosToPrimVertexXYZ[1]*dcaPosToPrimVertexXYZ[1]);
+ dcaDaughterToPrimVertex[1] =
+ TMath::Sqrt(dcaNegToPrimVertexXYZ[0]*dcaNegToPrimVertexXYZ[0]
+ +dcaNegToPrimVertexXYZ[1]*dcaNegToPrimVertexXYZ[1]);
// add it to the V0 array as well
- Double_t d0[2] = { 999., 99.};
- new(V0s[jV0s++]) AliAODv0(vV0, 999., 99., p_pos, p_neg, d0); // to be refined
+ aodV0 = new(V0s[jV0s++])
+ AliAODv0(vV0, dcaV0Daughters, dcaV0ToPrimVertex, p_pos_atv0, p_neg_atv0, dcaDaughterToPrimVertex); // to be refined
+ // set the aod v0 on-the-fly status
+ aodV0->SetOnFlyStatus(v0->GetOnFlyStatus());
+// if (fDebug > 0)
+// printf("-------------------Bo: In the v0 loop: onFlyStatus=%d,dcaV0Daughters=%.3f dcaV0ToPrimVertex=%.3f dcaDaughterToPrimVertex=[%.3f,%.3f]\n",
+// aodV0->GetOnFlyStatus(), aodV0->DcaV0Daughters(), aodV0->DcaV0ToPrimVertex(),
+// aodV0->DcaPosToPrimVertex(),aodV0->DcaNegToPrimVertex());
}
V0s.Expand(jV0s);
// end of the loop on V0s
usedTrack[imother] = kTRUE;
- AliESDtrack *esdTrack = esd->GetTrack(imother);
- esdTrack->GetPxPyPz(p);
- esdTrack->GetXYZ(pos);
- esdTrack->GetCovarianceXYZPxPyPz(covTr);
- esdTrack->GetESDpid(pid);
+ AliESDtrack *esdTrackM = esd->GetTrack(imother);
+ esdTrackM->GetPxPyPz(p);
+ esdTrackM->GetXYZ(pos);
+ esdTrackM->GetCovarianceXYZPxPyPz(covTr);
+ esdTrackM->GetESDpid(pid);
mother =
- new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
- esdTrack->GetLabel(),
+ new(tracks[jTracks++]) AliAODTrack(esdTrackM->GetID(),
+ esdTrackM->GetLabel(),
p,
kTRUE,
pos,
kFALSE,
covTr,
- (Short_t)esdTrack->GetSign(),
- esdTrack->GetITSClusterMap(),
+ (Short_t)esdTrackM->GetSign(),
+ esdTrackM->GetITSClusterMap(),
pid,
primary,
kTRUE, // check if this is right
kTRUE, // check if this is right
AliAODTrack::kPrimary);
- mother->SetFlags(esdTrack->GetStatus());
+ if (esdTrackM->GetSign() > 0) nPosTracks++;
+ mother->SetFlags(esdTrackM->GetStatus());
mother->ConvertAliPIDtoAODPID();
primary->AddDaughter(mother);
mother->ConvertAliPIDtoAODPID();
+ SetAODPID(esdTrackM,mother,detpid,timezero);
}
else {
// cerr << "Error: event " << esd->GetEventNumberInFile() << " kink " << TMath::Abs(ikink)-1
usedTrack[idaughter] = kTRUE;
- AliESDtrack *esdTrack = esd->GetTrack(idaughter);
- esdTrack->GetPxPyPz(p);
- esdTrack->GetXYZ(pos);
- esdTrack->GetCovarianceXYZPxPyPz(covTr);
- esdTrack->GetESDpid(pid);
+ AliESDtrack *esdTrackD = esd->GetTrack(idaughter);
+ esdTrackD->GetPxPyPz(p);
+ esdTrackD->GetXYZ(pos);
+ esdTrackD->GetCovarianceXYZPxPyPz(covTr);
+ esdTrackD->GetESDpid(pid);
daughter =
- new(tracks[jTracks++]) AliAODTrack(esdTrack->GetID(),
- esdTrack->GetLabel(),
+ new(tracks[jTracks++]) AliAODTrack(esdTrackD->GetID(),
+ esdTrackD->GetLabel(),
p,
kTRUE,
pos,
kFALSE,
covTr,
- (Short_t)esdTrack->GetSign(),
- esdTrack->GetITSClusterMap(),
+ (Short_t)esdTrackD->GetSign(),
+ esdTrackD->GetITSClusterMap(),
pid,
vkink,
kTRUE, // check if this is right
kTRUE, // check if this is right
- AliAODTrack::kPrimary);
- daughter->SetFlags(esdTrack->GetStatus());
+ AliAODTrack::kSecondary);
+ if (esdTrackD->GetSign() > 0) nPosTracks++;
+ daughter->SetFlags(esdTrackD->GetStatus());
daughter->ConvertAliPIDtoAODPID();
vkink->AddDaughter(daughter);
daughter->ConvertAliPIDtoAODPID();
+ SetAODPID(esdTrackD,daughter,detpid,timezero);
}
else {
// cerr << "Error: event " << esd->GetEventNumberInFile() << " kink " << TMath::Abs(ikink)-1
// Tracks (primary and orphan)
- printf("NUMBER OF TRACKS %5d\n", nTracks);
+ if (fDebug > 0) printf("NUMBER OF ESD TRACKS %5d\n", nTracks);
for (Int_t nTrack = 0; nTrack < nTracks; ++nTrack) {
AliAODTrack::kPrimary,
selectInfo)
);
+ if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->SetFlags(esdTrack->GetStatus());
aodTrack->ConvertAliPIDtoAODPID();
+ SetAODPID(esdTrack,aodTrack,detpid,timezero);
}
else {
// outside the beam pipe: orphan track
kFALSE, // check if this is right
AliAODTrack::kOrphan,
selectInfo);
+ if (esdTrack->GetSign() > 0) nPosTracks++;
aodTrack->SetFlags(esdTrack->GetStatus());
aodTrack->ConvertAliPIDtoAODPID();
*/
}
} // end of loop on tracks
- // muon tracks
- Int_t nMuTracks = esd->GetNumberOfMuonTracks();
- for (Int_t nMuTrack = 0; nMuTrack < nMuTracks; ++nMuTrack) {
-
- AliESDMuonTrack *esdMuTrack = esd->GetMuonTrack(nMuTrack);
- p[0] = esdMuTrack->Px();
- p[1] = esdMuTrack->Py();
- p[2] = esdMuTrack->Pz();
- pos[0] = primary->GetX();
- pos[1] = primary->GetY();
- pos[2] = primary->GetZ();
-
- // has to be changed once the muon pid is provided by the ESD
- for (Int_t i = 0; i < 10; pid[i++] = 0.); pid[AliAODTrack::kMuon]=1.;
-
- primary->AddDaughter(aodTrack =
- new(tracks[jTracks++]) AliAODTrack(0, // no ID provided
- 0, // no label provided
- p,
- kTRUE,
- pos,
- kFALSE,
- NULL, // no covariance matrix provided
- (Short_t)-99, // no charge provided
- 0, // no ITSClusterMap
- pid,
- primary,
- kTRUE, // check if this is right
- kTRUE, // not used for vertex fit
- AliAODTrack::kPrimary)
- );
-
- aodTrack->ConvertAliPIDtoAODPID();
- aodTrack->SetHitsPatternInTrigCh(esdMuTrack->GetHitsPatternInTrigCh());
- Int_t track2Trigger = esdMuTrack->GetMatchTrigger();
- aodTrack->SetMatchTrigger(track2Trigger);
- if (track2Trigger)
- aodTrack->SetChi2MatchTrigger(esdMuTrack->GetChi2MatchTrigger());
- else
- aodTrack->SetChi2MatchTrigger(0.);
- }
- tracks.Expand(jTracks); // remove 'empty slots' due to unwritten tracks
+ // Update number of AOD tracks in header at the end of track loop (M.G.)
+ header->SetRefMultiplicity(jTracks);
+ header->SetRefMultiplicityPos(nPosTracks);
+ header->SetRefMultiplicityNeg(jTracks - nPosTracks);
+ if (fDebug > 0)
+ printf(" NAODTRACKS=%d NPOS=%d NNEG=%d\n", jTracks, nPosTracks, jTracks - nPosTracks);
+ // Do not shrink the array of tracks - other filters may add to it (M.G)
+// tracks.Expand(jTracks); // remove 'empty slots' due to unwritten tracks
// Access to the AOD container of PMD clusters
TClonesArray &pmdClusters = *(AODEvent()->GetPmdClusters());
AliESDPmdTrack *pmdTrack = esd->GetPmdTrack(iPmd);
Int_t nLabel = 0;
Int_t *label = 0x0;
- Double_t pos[3] = { pmdTrack->GetClusterX(), pmdTrack->GetClusterY(), pmdTrack->GetClusterZ() };
- Double_t pid[9] = { 0., 0., 0., 0., 0., 0., 0., 0., 0. }; // to be revised!
+ Double_t posPmd[3] = { pmdTrack->GetClusterX(), pmdTrack->GetClusterY(), pmdTrack->GetClusterZ()};
+ Double_t pidPmd[9] = { 0., 0., 0., 0., 0., 0., 0., 0., 0. }; // to be revised!
// type not set!
// assoc cluster not set
- new(pmdClusters[jPmdClusters++]) AliAODPmdCluster(iPmd, nLabel, label, pmdTrack->GetClusterADC(), pos, pid);
+ new(pmdClusters[jPmdClusters++]) AliAODPmdCluster(iPmd, nLabel, label, pmdTrack->GetClusterADC(), posPmd, pidPmd);
}
// Access to the AOD container of clusters
nLabel,
label,
energy,
- pos,
+ posF,
NULL,
ttype);
caloCluster->SetCaloCluster(cluster->GetDistanceToBadChannel(),
cluster->GetClusterDisp(),
- cluster->GetM20(), cluster->GetM02(), cluster->GetM11(),
- cluster->GetEmcCpvDistance(), cluster->GetNExMax()) ;
+ cluster->GetM20(), cluster->GetM02(),
+ cluster->GetEmcCpvDistance(),
+ cluster->GetNExMax(),cluster->GetTOF()) ;
+ caloCluster->SetPIDFromESD(cluster->GetPid());
caloCluster->SetNCells(cluster->GetNCells());
caloCluster->SetCellsAbsId(cluster->GetCellsAbsId());
caloCluster->SetCellsAmplitudeFraction(cluster->GetCellsAmplitudeFraction());
+
+ TArrayI* matchedT = cluster->GetTracksMatched();
+ if (matchedT && cluster->GetTrackMatched() >= 0) {
+ for (Int_t im = 0; im < matchedT->GetSize(); im++) {
+ caloCluster->AddTrackMatched((esd->GetTrack(im)));
+ }
+ }
+
}
caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters
// end of loop on calo clusters
delete [] usedTrack;
delete [] usedV0;
delete [] usedKink;
+ delete v0DaughterTracks;
return;
}
+void AliAnalysisTaskESDfilter::SetAODPID(AliESDtrack *esdtrack, AliAODTrack *aodtrack, AliAODPid *detpid, Double_t timezero)
+{
+ //
+ // Setter for the raw PID detector signals
+ //
+
+ if(esdtrack->Pt()>fHighPthreshold) {
+ detpid = new AliAODPid();
+ detpid->SetDetectorRawSignals(esdtrack,timezero);
+ aodtrack->SetDetPID(detpid);
+ } else {
+ if(fPtshape){
+ if(esdtrack->Pt()> fPtshape->GetXmin()){
+ Double_t y = fPtshape->Eval(esdtrack->Pt())/fPtshape->Eval(fHighPthreshold);
+ if(gRandom->Rndm(0)<1./y){
+ detpid = new AliAODPid();
+ detpid->SetDetectorRawSignals(esdtrack,timezero);
+ aodtrack->SetDetPID(detpid);
+ }//end rndm
+ }//end if p < pmin
+ }//end if p function
+ }// end else
+}
+
+
void AliAnalysisTaskESDfilter::Terminate(Option_t */*option*/)
{
// Terminate analysis