Updates to the cluster finder and the track finder
authorauras <auras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Feb 2012 15:41:50 +0000 (15:41 +0000)
committerauras <auras@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 28 Feb 2012 15:41:50 +0000 (15:41 +0000)
MFT/AliMFTClusterFinder.cxx
MFT/AliMuonForwardTrackAnalysis.cxx
MFT/AliMuonForwardTrackAnalysis.h
MFT/AliMuonForwardTrackFinder.C
MFT/AliMuonForwardTrackFinder.cxx
MFT/AliMuonForwardTrackFinder.h
MFT/Config.C

index eec7b5f..0a8165a 100644 (file)
@@ -86,7 +86,7 @@ void AliMFTClusterFinder::StartEvent() {
   AliDebug(1, "Starting Event...");
   
   for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
-    fClustersPerPlane[iPlane]->Clear();
+    fClustersPerPlane[iPlane]->Delete();
   }
 
   AliDebug(1, "... done!");
@@ -105,11 +105,13 @@ void AliMFTClusterFinder::DigitsToClusters(const TObjArray *pDigitList) {
   StartEvent(); 
   Bool_t isDigAvailableForNewCluster = kTRUE;
   
+  TClonesArray *myDigitList = 0;
+
   for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
 
     AliDebug(1, Form("Plane %02d", iPlane));
 
-    TClonesArray *myDigitList = (TClonesArray*) pDigitList->At(iPlane);
+    myDigitList = (TClonesArray*) pDigitList->At(iPlane);
 
     AliDebug(1, Form("myDigitList->GetEntries() = %d", myDigitList->GetEntries()));
 
@@ -162,6 +164,8 @@ void AliMFTClusterFinder::DigitsToClusters(const TObjArray *pDigitList) {
 
     AliDebug(1, Form("Found %d clusters in plane %02d", fClustersPerPlane[iPlane]->GetEntries(), iPlane));
 
+    myDigitList -> Delete();
+
   }  // end of cycle over the planes
 
 }
index 1488c07..42dd32a 100644 (file)
@@ -22,6 +22,7 @@
 #include "TRandom.h"
 #include "TLorentzVector.h"
 #include "TDatabasePDG.h"
+#include "TGraph.h"
 #include "AliMuonForwardTrackAnalysis.h"
 
 ClassImp(AliMuonForwardTrackAnalysis)
@@ -55,11 +56,13 @@ AliMuonForwardTrackAnalysis::AliMuonForwardTrackAnalysis():
   fHistOffsetSingleMuonsX_vsPtRapidity(0x0),
   fHistOffsetSingleMuonsY_vsPtRapidity(0x0),
   fHistSingleMuonsPtRapidity(0x0),
+  fHistSingleMuonsOffsetChi2(0x0),
   fHistWOffsetMuonPairs(0x0),
   fHistMassMuonPairs(0x0),
   fHistMassMuonPairsWithoutMFT(0x0),
   fHistMassMuonPairsMC(0x0),
   fHistRapidityPtMuonPairsMC(0x0),
+  fGraphSingleMuonsOffsetChi2(0x0),
   fNMassBins(1000),
   fMassMin(0),
   fMassMax(10),
@@ -67,9 +70,9 @@ AliMuonForwardTrackAnalysis::AliMuonForwardTrackAnalysis():
   fMuonPairAnalysis(1),
   fMatchTrigger(0),
   fOption(0),
-  fXVertResMC(150.e-4),
-  fYVertResMC(150.e-4),
-  fZVertResMC(100.e-4),
+  fXVertResMC(50.e-4),
+  fYVertResMC(50.e-4),
+  fZVertResMC(50.e-4),
   fMaxNWrongClustersMC(999),
   fPtMinSingleMuons(0)
 {
@@ -163,7 +166,7 @@ Bool_t AliMuonForwardTrackAnalysis::AnalyzeSingleMuon() {
 
   if (fNTracksAnalyzedOfEvent>=fNTracksOfEvent) return kFALSE;
 
-  fMFTTrack   = (AliMuonForwardTrack*) fMuonForwardTracks->At(fNTracksAnalyzedOfEvent);
+  fMFTTrack = (AliMuonForwardTrack*) fMuonForwardTracks->At(fNTracksAnalyzedOfEvent);
   fNTracksAnalyzedOfEvent++;
   if (fMatchTrigger && !fMFTTrack->GetMatchTrigger()) return kTRUE;
   fMCRefTrack = fMFTTrack->GetMCTrackRef();
@@ -172,7 +175,9 @@ Bool_t AliMuonForwardTrackAnalysis::AnalyzeSingleMuon() {
   if (fMFTTrack->GetNWrongClustersMC()>fMaxNWrongClustersMC) return kTRUE;
 
   Double_t xOrig=gRandom->Gaus(0., fXVertResMC);
-  Double_t yOrig=gRandom->Gaus(0., fXVertResMC);
+  Double_t yOrig=gRandom->Gaus(0., fYVertResMC);
+//   Double_t xOrig = 0.;
+//   Double_t yOrig = 0.;
   Double_t zOrig=gRandom->Gaus(0., fZVertResMC);
 
   AliMUONTrackParam *param = fMFTTrack->GetTrackParamAtMFTCluster(0);
@@ -208,9 +213,12 @@ Bool_t AliMuonForwardTrackAnalysis::AnalyzeSingleMuon() {
     fHistOffsetSingleMuonsX_tmp[rapBin-1][ptBin-1]->Fill(1.e4*dX);
     fHistOffsetSingleMuonsY_tmp[rapBin-1][ptBin-1]->Fill(1.e4*dY);
   }
-  fHistSingleMuonsPtRapidity -> Fill(pMu.Rapidity(), pMu.Pt());
-  fHistOffsetSingleMuons     -> Fill(1.e4*offset);
-  fHistWOffsetSingleMuons    -> Fill(weightedOffset);
+  fHistSingleMuonsPtRapidity  -> Fill(pMu.Rapidity(), pMu.Pt());
+  fHistOffsetSingleMuons      -> Fill(1.e4*offset);
+  fHistWOffsetSingleMuons     -> Fill(weightedOffset);
+  Double_t chi2OverNdf = fMFTTrack->GetGlobalChi2()/Double_t(fMFTTrack->GetNMFTClusters()+fMFTTrack->GetNMUONClusters());
+  fHistSingleMuonsOffsetChi2  -> Fill(1.e4*offset, chi2OverNdf);
+  fGraphSingleMuonsOffsetChi2 -> SetPoint(fGraphSingleMuonsOffsetChi2->GetN(),1.e4*offset, chi2OverNdf);
 
   fNTracksAnalyzed++;
 
@@ -232,7 +240,7 @@ Bool_t AliMuonForwardTrackAnalysis::AnalyzeMuonPair() {
   }
 
   Double_t xOrig=gRandom->Gaus(0., fXVertResMC);
-  Double_t yOrig=gRandom->Gaus(0., fXVertResMC);
+  Double_t yOrig=gRandom->Gaus(0., fYVertResMC);
   Double_t zOrig=gRandom->Gaus(0., fZVertResMC);
   AliDebug(1, Form("origin = (%f, %f, %f)", xOrig, yOrig, zOrig));
 
@@ -322,6 +330,9 @@ void AliMuonForwardTrackAnalysis::Terminate(Char_t *outputFileName) {
 //   }
 
   fHistSingleMuonsPtRapidity -> Write();
+  fHistSingleMuonsOffsetChi2 -> Write();
+
+  fGraphSingleMuonsOffsetChi2 -> Write();
 
   fHistWOffsetMuonPairs        -> Write();
   fHistMassMuonPairs          -> Write();
@@ -341,7 +352,7 @@ void AliMuonForwardTrackAnalysis::BookHistos() {
   fHistOffsetSingleMuonsY = new TH1D("fHistOffsetSingleMuonsY", "Offset for single muons along Y",  200, -1000, 1000);
   fHistErrorSingleMuonsX  = new TH1D("fHistErrorSingleMuonsX",  "Coordinate Error for single muons along X",  200, 0, 1000);
   fHistErrorSingleMuonsY  = new TH1D("fHistErrorSingleMuonsY",  "Coordinate Error for single muons along Y",  200, 0, 1000);
-  fHistOffsetSingleMuons  = new TH1D("fHistOffsetSingleMuons",  "Offset for single muons",          100, 0, 2000);
+  fHistOffsetSingleMuons  = new TH1D("fHistOffsetSingleMuons",  "Offset for single muons",          200, 0, 2000);
   fHistWOffsetSingleMuons = new TH1D("fHistWOffsetSingleMuons", "Weighted Offset for single muons", 300, 0, 15);  
 
   fHistOffsetSingleMuonsX_vsPtRapidity = new TH2D("fHistOffsetSingleMuonsX_vsPtRapidity", "Offset for single muons along X", 
@@ -357,6 +368,7 @@ void AliMuonForwardTrackAnalysis::BookHistos() {
   }
 
   fHistSingleMuonsPtRapidity = new TH2D("fHistSingleMuonsPtRapidity", "Phase Space for single muons", 10, -4, -2.5, 10, 0.5, 5.5);
+  fHistSingleMuonsOffsetChi2 = new TH2D("fHistSingleMuonsOffsetChi2", "Offset vs #chi^{2}/ndf for single muons", 400, 0, 4000, 100, 0, 20);
 
   fHistOffsetSingleMuonsX -> SetXTitle("Offset(X)  [#mum]");
   fHistOffsetSingleMuonsY -> SetXTitle("Offset(Y)  [#mum]");
@@ -372,6 +384,8 @@ void AliMuonForwardTrackAnalysis::BookHistos() {
 
   fHistSingleMuonsPtRapidity -> SetXTitle("y^{#mu}");
   fHistSingleMuonsPtRapidity -> SetYTitle("p_{T}^{#mu}  [GeV/c]");
+  fHistSingleMuonsOffsetChi2 -> SetXTitle("Offset  [#mum]");
+  fHistSingleMuonsOffsetChi2 -> SetYTitle("#chi^{2}/ndf");
 
   fHistOffsetSingleMuonsX -> Sumw2();
   fHistOffsetSingleMuonsY -> Sumw2();
@@ -383,9 +397,15 @@ void AliMuonForwardTrackAnalysis::BookHistos() {
   fHistOffsetSingleMuonsX_vsPtRapidity -> Sumw2();
   fHistOffsetSingleMuonsY_vsPtRapidity -> Sumw2();
   fHistSingleMuonsPtRapidity           -> Sumw2();
+  fHistSingleMuonsOffsetChi2           -> Sumw2();
     
   //--------------------------------------------
 
+  fGraphSingleMuonsOffsetChi2 = new TGraph("fGraphSingleMuonsOffsetChi2");
+  fGraphSingleMuonsOffsetChi2 -> SetName("fGraphSingleMuonsOffsetChi2");
+
+  //--------------------------------------------
+
   fHistWOffsetMuonPairs        = new TH1D("fHistWOffsetMuonPairs",        "Weighted Offset for Muon Pairs", 300, 0, 60);
   fHistMassMuonPairs          = new TH1D("fHistMassMuonPairs",           "Dimuon Mass (MUON+MFT)",  fNMassBins, fMassMin, fMassMax);
   fHistMassMuonPairsWithoutMFT = new TH1D("fHistMassMuonPairsWithoutMFT", "Dimuon Mass (MUON only)", fNMassBins, fMassMin, fMassMax);
index a7ddbd1..64e9f54 100644 (file)
@@ -22,6 +22,7 @@
 #include "AliMUONTrackParam.h"
 #include "AliMUONTrackExtrap.h"
 #include "TDatabasePDG.h"
+#include "TGraph.h"
 
 //====================================================================================================================================================
 
@@ -86,9 +87,12 @@ private:
   TH2D *fHistOffsetSingleMuonsX_vsPtRapidity, *fHistOffsetSingleMuonsY_vsPtRapidity, *fHistSingleMuonsPtRapidity;  //!
   TH1D *fHistOffsetSingleMuonsX_tmp[fNRapBinsOffsetSingleMuons][fNPtBinsOffsetSingleMuons];                       //!
   TH1D *fHistOffsetSingleMuonsY_tmp[fNRapBinsOffsetSingleMuons][fNPtBinsOffsetSingleMuons];                       //!
+  TH2D *fHistSingleMuonsOffsetChi2;                                                                                //!
   TH1D *fHistWOffsetMuonPairs, *fHistMassMuonPairs, *fHistMassMuonPairsWithoutMFT, *fHistMassMuonPairsMC;          //!
   TH2D *fHistRapidityPtMuonPairsMC;
  
+  TGraph *fGraphSingleMuonsOffsetChi2;     //!
+
   Int_t fNMassBins;
   Double_t fMassMin, fMassMax;
 
index dcd9b85..1b34e9a 100644 (file)
@@ -1,6 +1,7 @@
 //================================================================================================================================
 
 void AliMuonForwardTrackFinder(Int_t run=0,
+                              Double_t zVertexError=0.010,
                               Int_t matching=0,
                               const Char_t *readDir= ".",
                               const Char_t *outDir = ".",
@@ -25,9 +26,11 @@ void AliMuonForwardTrackFinder(Int_t run=0,
   //  finder -> SetRAbsorberCut(26.4);
   finder -> SetLowPtCut(0.0);
   //  finder -> SetLowPtCut(0.5);
-  finder -> SetVertexError(0.015, 0.015, 0.010);
+  finder -> SetVertexError(0.015, 0.015, zVertexError);
   finder -> SetMatchingMode(matching);                // 0 -> real matching   1 -> ideal matching
-  finder -> SetMinResearchRadiusAtLastPlane(0.0);
+//  finder -> SetMinResearchRadiusAtPlane(4, 0.0);
+  finder -> SetMinResearchRadiusAtPlane(4, 0.50);
+  finder -> SetMinResearchRadiusAtPlane(3, 0.05);
 
   while (finder->LoadNextTrack()) continue;
 
index 2e42229..39d4eaa 100644 (file)
@@ -151,7 +151,6 @@ AliMuonForwardTrackFinder::AliMuonForwardTrackFinder():
   fOutputEventTree(0),
   fMuonForwardTracks(0),
   fMatchingMode(-1),
-  fMinResearchRadiusAtLastPlane(0),
   fGRPData(0),
   fRunInfo(0)
 
@@ -192,6 +191,8 @@ AliMuonForwardTrackFinder::AliMuonForwardTrackFinder():
 
     fIsPlaneMandatory[iPlane] = kFALSE;
     
+    fMinResearchRadiusAtPlane[iPlane] = 0.;
+
   }
 
   //  fNextTrack = 0;
@@ -435,7 +436,7 @@ Bool_t AliMuonForwardTrackFinder::LoadNextEvent() {
   fRunLoader -> LoadKinematics();
   fStack = fRunLoader->Stack();
   fNextTrack = fTrackStore->CreateIterator();
-  fMuonForwardTracks->Clear();
+  fMuonForwardTracks->Delete();
 
   fEv++;
   
@@ -467,7 +468,7 @@ Int_t AliMuonForwardTrackFinder::LoadNextTrack() {
 
   fCountRealTracksAnalyzed++;
 
-  fCandidateTracks -> Clear();
+  fCandidateTracks -> Delete();
 
   fLabelMC = -1;
   fDistanceFromGoodClusterAndTrackAtLastPlane = -1.;
@@ -600,7 +601,7 @@ Int_t AliMuonForwardTrackFinder::LoadNextTrack() {
     AliMuonForwardTrack *newTrack = (AliMuonForwardTrack*) fCandidateTracks->UncheckedAt(0);
     new ((*fMuonForwardTracks)[fMuonForwardTracks->GetEntries()]) AliMuonForwardTrack(*newTrack);
     AliDebug(1, "...track added!\n");
-    fCandidateTracks->Clear();
+    fCandidateTracks->Delete();
     fCountRealTracksAnalyzedOfEvent++;
     fCountRealTracksAnalyzedWithFinalCandidates++;
     PrintParticleHistory();
@@ -783,7 +784,7 @@ Int_t AliMuonForwardTrackFinder::LoadNextTrack() {
 
   // -------------------------------------------------------------------------------------------
 
-  fCandidateTracks->Clear();
+  fCandidateTracks->Delete();
   fFinalBestCandidate = NULL;
   
   fCountRealTracksAnalyzedOfEvent++;
@@ -853,8 +854,8 @@ void AliMuonForwardTrackFinder::FindClusterInPlane(Int_t planeId) {
 
   Double_t researchRadiusFront = TMath::Sqrt(squaredError_X_Front + squaredError_Y_Front);
   Double_t researchRadiusBack  = TMath::Sqrt(squaredError_X_Back  + squaredError_Y_Back);
-  if (planeId==fNPlanesMFT-1 && 0.5*(researchRadiusFront+researchRadiusBack)<fMinResearchRadiusAtLastPlane) {
-    corrFact = fMinResearchRadiusAtLastPlane/(0.5*(researchRadiusFront+researchRadiusBack));
+  if (0.5*(researchRadiusFront+researchRadiusBack)<fMinResearchRadiusAtPlane[planeId]) {
+    corrFact = fMinResearchRadiusAtPlane[planeId]/(0.5*(researchRadiusFront+researchRadiusBack));
   }
   if (fIsCurrentMuonTrackable) {
     //    fOutputQAFile->cd();
@@ -1157,8 +1158,8 @@ Double_t AliMuonForwardTrackFinder::TryOneCluster(const AliMUONTrackParam &track
 void AliMuonForwardTrackFinder::SeparateFrontBackClusters() {
 
   for (Int_t iPlane=0; iPlane<fNPlanesMFT; iPlane++) {
-    fMFTClusterArrayFront[iPlane]->Clear();
-    fMFTClusterArrayBack[iPlane] ->Clear();
+    fMFTClusterArrayFront[iPlane]->Delete();
+    fMFTClusterArrayBack[iPlane] ->Delete();
     for (Int_t iCluster=0; iCluster<fMFTClusterArray[iPlane]->GetEntries(); iCluster++) {
       AliMFTCluster *cluster = (AliMFTCluster*) fMFTClusterArray[iPlane]->At(iCluster);
       if (TMath::Abs(cluster->GetZ())<TMath::Abs(fSegmentation->GetPlane(iPlane)->GetZCenter())) {
index f7e7961..adc97ad 100644 (file)
@@ -131,7 +131,7 @@ public:
   Bool_t IsMother(const Char_t *nameMother);
 
   void SetMatchingMode(Int_t matchingMode) { fMatchingMode = matchingMode; }
-  void SetMinResearchRadiusAtLastPlane(Double_t minResearchRadius) { fMinResearchRadiusAtLastPlane = minResearchRadius; }
+  void SetMinResearchRadiusAtPlane(Int_t plane, Double_t radius) { if (plane>=0 && plane<fNMaxPlanes) fMinResearchRadiusAtPlane[plane] = radius; }
 
   void FillOutputTree();
   void WriteOutputTree();
@@ -250,7 +250,7 @@ protected:
   TClonesArray *fMuonForwardTracks;       //! array of AliMuonForwardTrack
 
   Int_t fMatchingMode;
-  Double_t fMinResearchRadiusAtLastPlane;
+  Double_t fMinResearchRadiusAtPlane[fNMaxPlanes];
 
   AliGRPObject *fGRPData;              //! Data from the GRP/GRP/Data CDB folder
   AliRunInfo *fRunInfo;                //!
index d1941f7..a2edcda 100644 (file)
@@ -42,6 +42,7 @@
 
 enum PDCProc_t {kGenBox,
                kGenMuonLMR,
+               kGenParamJpsi,
                kGenPionKaon,
                kGenCorrHF,
                 kPythia6,
@@ -54,6 +55,7 @@ enum PDCProc_t {kGenBox,
 
 const Char_t* pprRunName[] = {"kGenBox",
                              "kGenMuonLMR",
+                             "kGenParamJpsi",
                              "kGenPionKaon",
                              "kGenCorrHF",
                              "kPythia6",
@@ -155,6 +157,7 @@ void Config() {
   else if (proc == kHijing2500Cocktail)   gener = Hijing2500Cocktail();
   else if (proc == kGenBox)               gener = GenBox();
   else if (proc == kGenMuonLMR)           gener = GenMuonLMR();
+  else if (proc == kGenParamJpsi)         gener = GenParamJpsi();
   else if (proc == kGenCorrHF)            gener = GenCorrHF();
   else if (proc == kGenPionKaon)          gener = GenParamPionKaon();
 
@@ -280,15 +283,35 @@ AliGenerator* GenMuonLMR() {
   AliGenMUONLMR *gener = new AliGenMUONLMR();
   gener->SetMomentumRange(0,999);
   gener->SetPtRange(0,100.);
+  gener->SetYRange(-4.0, -2.5);
   gener->SetPhiRange(0., 360.);
-  gener->SetThetaRange(0., 180.);
-  gener->SetChildThetaRange(170.0,179.0);
-  gener->SetYRange(-4.5, -2.0);
+  gener->SetChildThetaRange(170.0,178.0);
   gener->SetOrigin(0.0, 0.0, 0.0);             // vertex position
   gener->SetSigma(0.0, 0.0, 0.0);              // vertex position smearing
   gener->SetVertexSmear(kPerEvent);
   enum {kEta2Body, kEtaDalitz, kRho2Body, kOmega2Body, kOmegaDalitz, kPhi2Body, kEtaPrimeDalitz, kPionLMR, kKaonLMR}; 
-  gener->GenerateSingleProcess(kPhi2Body, 500);
+  gener->GenerateSingleProcess(kPhi2Body, 100);
+  gener->SetCutOnChild(1);
+
+  return gener;
+
+}
+
+//====================================================================================================================================================
+
+AliGenerator* GenParamJpsi() {
+
+  AliGenParam *gener = new AliGenParam(5, AliGenMUONlib::kJpsi);
+  gener->SetMomentumRange(0,999);
+  gener->SetPtRange(0,100.);
+  gener->SetYRange(-4.0, -2.5);
+  gener->SetPhiRange(0., 360.);
+  gener->SetChildThetaRange(170.0,178.0);
+  gener->SetOrigin(0.0, 0.0, 0.0);          // vertex position
+  gener->SetSigma(0.0, 0.0, 0.0);           // Sigma in (X,Y,Z) (cm) on IP position
+  gener->SetVertexSmear(kPerEvent);
+  gener->SetForceDecay(kDiMuon);
+  gener->SetTrackingFlag(1);
   gener->SetCutOnChild(1);
 
   return gener;