#include "AliMUONESDInterface.h"
#include "AliMuonForwardTrack.h"
#include "AliMUONConstants.h"
+#include "TGrid.h"
ClassImp(AliMFTTrackerMU)
for (Int_t iPlane=0; iPlane<fNPlanesMFT; iPlane++) {
AliInfo(Form("plane %02d: nClusters = %d\n", iPlane, fMFTClusterArray[iPlane]->GetEntries()));
}
+
+ AddClustersFromUnderlyingEvent();
+ AddClustersFromPileUpEvents();
+
SeparateFrontBackClusters();
return 0;
Int_t nCandidates = fCandidateTracks->GetEntriesFast();
for (Int_t iCandidate=0; iCandidate<nCandidates; iCandidate++) {
+
+ if (!(fCandidateTracks->UncheckedAt(iCandidate))) continue;
fCurrentTrack = (AliMuonForwardTrack*) fCandidateTracks->UncheckedAt(iCandidate);
// if the old track is compatible with the new cluster, the track is updated and inserted as new track in the array
for (Int_t iFinalCandidate=0; iFinalCandidate<nFinalTracks; iFinalCandidate++) {
+ if (!(fCandidateTracks->UncheckedAt(iFinalCandidate))) continue;
AliMuonForwardTrack *finalTrack = (AliMuonForwardTrack*) fCandidateTracks->UncheckedAt(iFinalCandidate);
Int_t nMFTClusters = finalTrack->GetNMFTClusters();
myESDTrack -> SetFirstTrackingPoint(newTrack->GetMFTCluster(0)->GetX(), newTrack->GetMFTCluster(0)->GetY(), newTrack->GetMFTCluster(0)->GetZ());
myESDTrack -> SetXYAtVertex(newTrack->GetOffsetX(0., AliMFTConstants::fZEvalKinem), newTrack->GetOffsetY(0., AliMFTConstants::fZEvalKinem));
myESDTrack -> SetRAtAbsorberEnd(newTrack->GetRAtAbsorberEnd());
- myESDTrack -> SetCovariances(newTrack->GetTrackParamAtMFTCluster(0)->GetCovariances()); // waiting for commit from Peter...
+ myESDTrack -> SetCovariances(newTrack->GetTrackParamAtMFTCluster(0)->GetCovariances());
myESDTrack -> SetChi2MatchTrigger(esdTrack->GetChi2MatchTrigger());
myESDTrack -> SetMuonClusterMap(esdTrack->GetMuonClusterMap());
myESDTrack -> SetHitsPatternInTrigCh(esdTrack->GetHitsPatternInTrigCh());
for (Int_t iCluster=0; iCluster<newTrack->GetNMFTClusters(); iCluster++) {
AliMFTCluster *localCluster = newTrack->GetMFTCluster(iCluster);
mftClusterPattern |= 1 << localCluster->GetPlane();
- mftClusterPattern |= IsCorrectMatch(localCluster, newTrack->GetMCLabel()) << fNMaxPlanes+localCluster->GetPlane();
+ mftClusterPattern |= IsCorrectMatch(localCluster, newTrack->GetMCLabel()) << (fNMaxPlanes + localCluster->GetPlane());
}
myESDTrack -> SetMFTClusterPattern(mftClusterPattern);
void AliMFTTrackerMU::GetVertexFromMC() {
- AliRunLoader *fRunLoader = AliRunLoader::Open("galice.root");
- if (!fRunLoader) {
+ AliRunLoader *runLoader = AliRunLoader::Open("galice.root");
+ if (!runLoader) {
AliError("no run loader found in file galice.root");
return;
}
- fRunLoader->CdGAFile();
- fRunLoader->LoadgAlice();
- fRunLoader->LoadHeader();
- fRunLoader->GetEvent(gAlice->GetEvNumber());
+ runLoader->CdGAFile();
+ runLoader->LoadgAlice();
+ runLoader->LoadHeader();
+ runLoader->GetEvent(gAlice->GetEvNumber());
TArrayF vtx(3);
- fRunLoader->GetHeader()->GenEventHeader()->PrimaryVertex(vtx);
+ runLoader->GetHeader()->GenEventHeader()->PrimaryVertex(vtx);
+ AliInfo(Form("Primary vertex from MC found in (%f, %f, %f)\n",vtx[0], vtx[1], vtx[2]));
fXExtrapVertex = gRandom->Gaus(vtx[0], AliMFTConstants::fPrimaryVertexResX);
fYExtrapVertex = gRandom->Gaus(vtx[1], AliMFTConstants::fPrimaryVertexResY);
//======================================================================================================================================
+void AliMFTTrackerMU::AddClustersFromUnderlyingEvent() {
+
+ AliInfo("Adding clusters from underlying event");
+
+ if (!fMFT) return;
+
+ TGrid::Connect("alien://");
+
+ TFile* fileWithClustersToAdd = TFile::Open(fMFT->GetFileNameForUnderlyingEvent());
+ if (!fileWithClustersToAdd) return;
+ if (!(fileWithClustersToAdd->IsOpen())) return;
+ if (!(fileWithClustersToAdd->cd(Form("Event%d",fMFT->GetUnderlyingEventID())))) return;
+
+ TClonesArray *recPointsPerPlaneToAdd[AliMFTConstants::fNMaxPlanes] = {0};
+ TTree *treeIn = 0;
+
+ for (Int_t iPlane=0; iPlane<AliMFTConstants::fNMaxPlanes; iPlane++) recPointsPerPlaneToAdd[iPlane] = new TClonesArray("AliMFTCluster");
+
+ treeIn = (TTree*) gDirectory->Get("TreeR");
+
+ for (Int_t iPlane=0; iPlane<fNPlanesMFT; iPlane++) {
+ if (!(treeIn->GetBranch(Form("Plane_%02d",iPlane)))) {
+ for (Int_t jPlane=0; jPlane<AliMFTConstants::fNMaxPlanes; jPlane++) delete recPointsPerPlaneToAdd[jPlane];
+ return;
+ }
+ else treeIn->SetBranchAddress(Form("Plane_%02d",iPlane), &(recPointsPerPlaneToAdd[iPlane]));
+ }
+
+ treeIn -> GetEntry(0);
+
+ for (Int_t iPlane=0; iPlane<fNPlanesMFT; iPlane++) {
+ printf("plane %d -> before = %d ",iPlane,fMFTClusterArray[iPlane]->GetEntries());
+ Int_t nClusters = recPointsPerPlaneToAdd[iPlane]->GetEntries();
+ for (Int_t iCluster=0; iCluster<nClusters; iCluster++) {
+ AliMFTCluster *newCluster = (AliMFTCluster*) recPointsPerPlaneToAdd[iPlane]->At(iCluster);
+ for (Int_t iTrack=0; iTrack<newCluster->GetNMCTracks(); iTrack++) newCluster->SetMCLabel(iTrack, newCluster->GetMCLabel(iTrack)+AliMFTConstants::fLabelOffsetMC);
+ new ((*fMFTClusterArray[iPlane])[fMFTClusterArray[iPlane]->GetEntries()]) AliMFTCluster(*newCluster);
+ }
+ printf("after = %d\n",fMFTClusterArray[iPlane]->GetEntries());
+ }
+
+ for (Int_t jPlane=0; jPlane<AliMFTConstants::fNMaxPlanes; jPlane++) delete recPointsPerPlaneToAdd[jPlane];
+
+}
+
+//======================================================================================================================================
+
+void AliMFTTrackerMU::AddClustersFromPileUpEvents() {
+
+ AliInfo("Adding clusters from pile-up event(s)");
+
+ if (!fMFT) return;
+
+ TGrid::Connect("alien://");
+
+ TFile* fileWithClustersToAdd = TFile::Open(fMFT->GetFileNameForPileUpEvents());
+ if (!fileWithClustersToAdd) return;
+ if (!(fileWithClustersToAdd->IsOpen())) return;
+
+ TClonesArray *recPointsPerPlaneToAdd[AliMFTConstants::fNMaxPlanes] = {0};
+ TTree *treeIn = 0;
+
+ for (Int_t iPileUp=0; iPileUp<AliMFTConstants::fNMaxPileUpEvents; iPileUp++) {
+
+ if (!(fileWithClustersToAdd->cd(Form("Event%d",fMFT->GetPileUpEventID(iPileUp))))) continue;
+
+ for (Int_t iPlane=0; iPlane<AliMFTConstants::fNMaxPlanes; iPlane++) recPointsPerPlaneToAdd[iPlane] = new TClonesArray("AliMFTCluster");
+
+ treeIn = (TTree*) gDirectory->Get("TreeR");
+
+ for (Int_t iPlane=0; iPlane<fNPlanesMFT; iPlane++) {
+ if (!(treeIn->GetBranch(Form("Plane_%02d",iPlane)))) {
+ for (Int_t jPlane=0; jPlane<AliMFTConstants::fNMaxPlanes; jPlane++) delete recPointsPerPlaneToAdd[jPlane];
+ return;
+ }
+ else treeIn->SetBranchAddress(Form("Plane_%02d",iPlane), &(recPointsPerPlaneToAdd[iPlane]));
+ }
+
+ treeIn -> GetEntry(0);
+
+ for (Int_t iPlane=0; iPlane<fNPlanesMFT; iPlane++) {
+ printf("plane %d -> before = %d ",iPlane,fMFTClusterArray[iPlane]->GetEntries());
+ Int_t nClusters = recPointsPerPlaneToAdd[iPlane]->GetEntries();
+ for (Int_t iCluster=0; iCluster<nClusters; iCluster++) {
+ AliMFTCluster *newCluster = (AliMFTCluster*) recPointsPerPlaneToAdd[iPlane]->At(iCluster);
+ for (Int_t iTrack=0; iTrack<newCluster->GetNMCTracks(); iTrack++) newCluster->SetMCLabel(iTrack, newCluster->GetMCLabel(iTrack)+AliMFTConstants::fLabelOffsetMC);
+ new ((*fMFTClusterArray[iPlane])[fMFTClusterArray[iPlane]->GetEntries()]) AliMFTCluster(*newCluster);
+ }
+ printf("after = %d\n",fMFTClusterArray[iPlane]->GetEntries());
+ }
+
+ for (Int_t jPlane=0; jPlane<AliMFTConstants::fNMaxPlanes; jPlane++) delete recPointsPerPlaneToAdd[jPlane];
+
+ }
+
+}
+
+//======================================================================================================================================
+