]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
updates in the TRD qa framework:
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 16 Oct 2008 11:29:00 +0000 (11:29 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 16 Oct 2008 11:29:00 +0000 (11:29 +0000)
- modify the interface of AliTRDtrackInfo
- improve debug streaming from AliTRDtrackInfoGen
- flexible output in AliTRDtrackingResolution (to be followed)

-This line, and those below, will be ignored--

M    AliTRDcalibration.cxx
M    AliTRDcheckDetector.cxx
M    AliTRDpidChecker.cxx
M    AliTRDpidChecker.h
M    AliTRDpidRefMaker.cxx
M    AliTRDrecoTask.cxx
M    AliTRDtrackInfo/AliTRDtrackInfo.cxx
M    AliTRDtrackInfo/AliTRDtrackInfo.h
M    AliTRDtrackInfoGen.cxx
M    AliTRDtrackInfoGen.h
M    AliTRDtrackingEfficiencyCombined.cxx
M    AliTRDtrackingResolution.cxx
M    AliTRDtrackingResolution.h
M    run.C

14 files changed:
TRD/qaRec/AliTRDcalibration.cxx
TRD/qaRec/AliTRDcheckDetector.cxx
TRD/qaRec/AliTRDpidChecker.cxx
TRD/qaRec/AliTRDpidChecker.h
TRD/qaRec/AliTRDpidRefMaker.cxx
TRD/qaRec/AliTRDrecoTask.cxx
TRD/qaRec/AliTRDtrackInfo/AliTRDtrackInfo.cxx
TRD/qaRec/AliTRDtrackInfo/AliTRDtrackInfo.h
TRD/qaRec/AliTRDtrackInfoGen.cxx
TRD/qaRec/AliTRDtrackInfoGen.h
TRD/qaRec/AliTRDtrackingEfficiencyCombined.cxx
TRD/qaRec/AliTRDtrackingResolution.cxx
TRD/qaRec/AliTRDtrackingResolution.h
TRD/qaRec/run.C

index 6af206895ea9e140ea179f434c38261f5bfa91b0..e7884edb4768853c4f9576a7ac7e78fe4a312a93 100644 (file)
@@ -141,7 +141,7 @@ void AliTRDcalibration::Exec(Option_t *)
   for(Int_t itrk=0; itrk < fTracks->GetEntriesFast(); itrk++){
     
     fTrackInfo = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
-    ftrdTrack = fTrackInfo->GetTRDtrack();
+    ftrdTrack = fTrackInfo->GetTrack();
     if(!ftrdTrack) continue;
     nbTrdTracksUsed++;
     fTRDCalibraFillHisto->UpdateHistogramsV1(ftrdTrack);
index 9a1a348223f12a3cc56dc02d6a0d9f1396b568ca..f51479242fb31d2a3173224b527553488e9ec091 100644 (file)
@@ -108,7 +108,7 @@ void AliTRDcheckDetector::Exec(Option_t *){
   AliTRDcluster *fTRDcluster = 0x0;
   for(Int_t iti = 0; iti < fTracks->GetEntriesFast(); iti++){
     fTrackInfo = dynamic_cast<AliTRDtrackInfo *>(fTracks->UncheckedAt(iti));
-    if(!fTrackInfo || !(fTRDtrack = fTrackInfo->GetTRDtrack())) continue;
+    if(!fTrackInfo || !(fTRDtrack = fTrackInfo->GetTrack())) continue;
     Int_t nclusters = fTRDtrack->GetNumberOfClusters();
     Int_t ntracklets = fTRDtrack->GetNumberOfTracklets();
     Float_t chi2 = fTRDtrack->GetChi2();
index 87fe1b71753aa5c77245187e9651dab33f7a3bce..2ad505afb855cedaabf2ffc33b5289227338e272 100644 (file)
@@ -94,6 +94,13 @@ void AliTRDpidChecker::CreateOutputObjects()
       200, 0, 10000)
     ,kdEdx);
 
+  // histos of the dE/dx distribution for all 5 particle species and 11 momenta 
+  fContainer->AddAt(
+    new TH2F("dEdxSlice", "", 
+      xBins*AliTRDReconstructor::kLQslices, -0.5, xBins*AliTRDReconstructor::kLQslices - 0.5,
+      200, 0, 5000)
+    ,kdEdxSlice);
+
   // histos of the pulse height distribution for all 5 particle species and 11 momenta 
   fContainer->AddAt(
     new TProfile2D("PH", "", 
@@ -149,12 +156,14 @@ void AliTRDpidChecker::Exec(Option_t *)
   TH2F *hPIDLQ;
   TH2F *hPIDNN;
   TH2F *hdEdx;
+  TH2F *hdEdxSlice;
   TProfile2D *hPH;
   TH2F *hNClus;
 
   hPIDLQ = (TH2F*)fContainer->At(kLQlikelihood);
   hPIDNN = (TH2F*)fContainer->At(kNNlikelihood);
   hdEdx  = (TH2F*)fContainer->At(kdEdx);
+  hdEdxSlice  = (TH2F*)fContainer->At(kdEdxSlice);
   hPH    = (TProfile2D*)fContainer->At(kPH);
   hNClus  = (TH2F*)fContainer->At(kNClus);
   
@@ -187,7 +196,7 @@ void AliTRDpidChecker::Exec(Option_t *)
     status = track->GetStatus();
     if(!(status&AliESDtrack::kTPCout)) continue;
 
-    if(!(TRDtrack = track->GetTRDtrack())) continue; 
+    if(!(TRDtrack = track->GetTrack())) continue; 
     //&&(track->GetNumberOfClustersRefit()
 
     // use only tracks that hit 6 chambers
@@ -248,7 +257,8 @@ void AliTRDpidChecker::Exec(Option_t *)
 //     Bool_t bChange = kFALSE;
 
     Float_t SumdEdx[AliTRDgeometry::kNlayer];
-    Int_t iNClus[AliTRDgeometry::kNlayer];       
+    Int_t iNClus[AliTRDgeometry::kNlayer];  
+    Float_t dEdxSlice[AliTRDgeometry::kNlayer][AliTRDReconstructor::kLQslices];
 
     for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
       TRDtracklet[iChamb] = TRDtrack -> GetTracklet(iChamb);
@@ -262,6 +272,9 @@ void AliTRDpidChecker::Exec(Option_t *)
 //       Printf("NClus[%d]", iNClus[iChamb]);
       fdEdx = TRDtracklet[iChamb] -> GetdEdx();
       SumdEdx[iChamb] += fdEdx[0] + fdEdx[1] + fdEdx[2]; 
+      for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
+       dEdxSlice[iChamb][iSlice] = fdEdx[iSlice];
+      }
     }
 
 //     if(bChange == kTRUE)
@@ -270,9 +283,13 @@ void AliTRDpidChecker::Exec(Option_t *)
     switch(track->GetPDG()){
     case kElectron:
     case kPositron:
-      hPIDLQ -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDLQ -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
         hdEdx -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
+       for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
+          hdEdxSlice -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice,
+                             dEdxSlice[iChamb][iSlice]);
+       }
        hNClus -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
         for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
           if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
@@ -283,9 +300,13 @@ void AliTRDpidChecker::Exec(Option_t *)
       break;
     case kMuonPlus:
     case kMuonMinus:
-      hPIDLQ -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDLQ -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
         hdEdx -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
+       for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
+          hdEdxSlice -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice, 
+                             dEdxSlice[iChamb][iSlice]);
+       }
        hNClus -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
         for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
           if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
@@ -296,9 +317,13 @@ void AliTRDpidChecker::Exec(Option_t *)
       break;
     case kPiPlus:
     case kPiMinus:
-      hPIDLQ -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDLQ -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
         hdEdx -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
+       for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
+          hdEdxSlice -> Fill(AliPID::kPion * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice,
+                             dEdxSlice[iChamb][iSlice]);
+       }
        hNClus -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
         for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
           if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
@@ -309,9 +334,13 @@ void AliTRDpidChecker::Exec(Option_t *)
       break;
     case kKPlus:
     case kKMinus:
-      hPIDLQ -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDLQ -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
         hdEdx -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
+       for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
+          hdEdxSlice -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice, 
+                             dEdxSlice[iChamb][iSlice]);
+       }
        hNClus -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
         for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
           if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
@@ -322,9 +351,13 @@ void AliTRDpidChecker::Exec(Option_t *)
       break;
     case kProton:
     case kProtonBar:
-      hPIDLQ -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDLQ -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       for(Int_t iChamb = 0; iChamb < AliTRDgeometry::kNlayer; iChamb++){
         hdEdx -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, SumdEdx[iChamb]);
+       for(Int_t iSlice = 0; iSlice < AliTRDReconstructor::kLQslices; iSlice++){
+          hdEdxSlice -> Fill(AliPID::kProton * AliTRDCalPID::kNMom * AliTRDReconstructor::kLQslices + iMomBin * AliTRDReconstructor::kLQslices + iSlice, 
+                             dEdxSlice[iChamb][iSlice]);
+       }
        hNClus -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, iNClus[iChamb]);
         for(Int_t iClus = 0; iClus < AliTRDtrackerV1::GetNTimeBins(); iClus++){
           if(!(TRDcluster = (AliTRDcluster*)TRDtracklet[iChamb] -> GetClusters(iClus)))
@@ -347,23 +380,23 @@ void AliTRDpidChecker::Exec(Option_t *)
     switch(track->GetPDG()){
     case kElectron:
     case kPositron:
-      hPIDNN -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDNN -> Fill(AliPID::kElectron * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       break;
     case kMuonPlus:
     case kMuonMinus:
-      hPIDNN -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDNN -> Fill(AliPID::kMuon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       break;
     case kPiPlus:
     case kPiMinus:
-      hPIDNN -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDNN -> Fill(AliPID::kPion * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       break;
     case kKPlus:
     case kKMinus:
-      hPIDNN -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDNN -> Fill(AliPID::kKaon * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       break;
     case kProton:
     case kProtonBar:
-      hPIDNN -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(0));
+      hPIDNN -> Fill(AliPID::kProton * AliTRDCalPID::kNMom + iMomBin, TRDtrack -> GetPID(AliPID::kElectron));
       break;
     }
 
index 4919333431b88331abf3792036b043b6d18e1cec..1eda391d86f66f5398f10066c4678c008f8f709f 100644 (file)
@@ -28,12 +28,13 @@ class AliTRDpidChecker : public AliTRDrecoTask
     kLQlikelihood    = 0     // place for 2-dim LQ electron likelihood distributions
     ,kNNlikelihood   = 1     // place for NN electron likelihood distributions
     ,kdEdx           = 2     // place for the dE/dx spectra
-    ,kPH             = 3     // place for pulse height spectra
-    ,kNClus          = 4     // place for the number of clusters per track
-    ,kMomentum       = 5     // place for the momentum distribution
-    ,kMomentumBin    = 6     // place for the momentum distribution
-    ,kGraphLQ        = 7     // place for the 2-dim LQ pion efficiencies
-    ,kGraphNN        = 8     // place for the NN pion efficiencies
+    ,kdEdxSlice      = 3     // place for the dE/dx spectra
+    ,kPH             = 4     // place for pulse height spectra
+    ,kNClus          = 5     // place for the number of clusters per track
+    ,kMomentum       = 6     // place for the momentum distribution
+    ,kMomentumBin    = 7     // place for the momentum distribution
+    ,kGraphLQ        = 8     // place for the 2-dim LQ pion efficiencies
+    ,kGraphNN        = 9     // place for the NN pion efficiencies
   };
 
   enum{
index 36efe491bdeb4f951047ffd579afa46776e4d14d..ecbefe035b12426f494682c9047f8b95de91c07c 100644 (file)
@@ -71,8 +71,8 @@ AliTRDpidRefMaker::AliTRDpidRefMaker()
 AliTRDpidRefMaker::~AliTRDpidRefMaker() 
 {
   if(fReconstructor) delete fReconstructor;
-  if(fNN) delete fNN;
-  if(fLQ) delete fLQ;
+  //if(fNN) delete fNN;
+  //if(fLQ) delete fLQ;
 }
 
 
@@ -152,7 +152,7 @@ void AliTRDpidRefMaker::Exec(Option_t *)
     status = track->GetStatus();
     if(!(status&AliESDtrack::kTPCout)) continue;
 
-    if(!(TRDtrack = track->GetTRDtrack())) continue; 
+    if(!(TRDtrack = track->GetTrack())) continue; 
     //&&(track->GetNumberOfClustersRefit()
 
     // use only tracks that hit 6 chambers
index 29f364f7e29330e594e2e979c062180708c2e980..a099740b5292d4652815fb46e6836f98560c433b 100644 (file)
@@ -76,7 +76,7 @@ Bool_t AliTRDrecoTask::PostProcess()
 void AliTRDrecoTask::SetDebugLevel(Int_t level)
 {
   fDebugLevel = level;
-  if(fDebugLevel>=2){
+  if(fDebugLevel>=1){
     TDirectory *savedir = gDirectory;
     fDebugStream = new TTreeSRedirector(Form("TRD.Debug%s.root", GetName()));
     savedir->cd();
index a52518e51765124bef4d7cace8d39962d5f05b27..0da155bac486da1ca26021e20a6bd41e34b26bc1 100644 (file)
@@ -278,17 +278,6 @@ void AliTRDtrackInfo::AddTrackRef(const AliTrackReference *tref)
   fMC->fTrackRefs[fMC->fNTrackRefs++] = new AliTrackReference(*tref);
 }
 
-//___________________________________________________
-AliTRDseedV1* AliTRDtrackInfo::GetTracklet(Int_t idx) const 
-{
-  //
-  // Returns a tracklet
-  //
-
-       if(!fTRDtrack) return 0x0;
-  return idx < 6 ? const_cast<AliTRDseedV1 *>(fTRDtrack->GetTracklet(idx)) : 0x0;
-}
-
 //___________________________________________________
 AliTrackReference * AliTRDtrackInfo::GetTrackRef(Int_t idx) const
 {
@@ -296,7 +285,7 @@ AliTrackReference * AliTRDtrackInfo::GetTrackRef(Int_t idx) const
   // Returns a track reference
   //
   if(!fMC) return 0x0;
-  return idx < 12 ? fMC->fTrackRefs[idx] : 0x0;
+  return (idx>=0 && idx < 12) ? fMC->fTrackRefs[idx] : 0x0;
 }
 
 //___________________________________________________
index 72e67071934e6cf7611faae2d343dacdb1a86b73..a2207f870926c7b81dce475456b0809eb68f95f7 100644 (file)
@@ -56,6 +56,7 @@ public:
   class AliMCinfo{
   friend class AliTRDtrackInfo;
   public:
+    //typedef AliTrackReference (const* constAliTrackReference);
     AliMCinfo();
     AliMCinfo(const AliMCinfo&);
     virtual ~AliMCinfo();
@@ -63,7 +64,8 @@ public:
     Int_t   GetLabel() const {return fLabel;}
     Int_t   GetNTrackRefs() const {return fNTrackRefs;}
     Int_t   GetPDG() const {return fPDG;}
-    //AliTrackReference* const* GetTrackRefIter() const {return &fTrackRefs[0];}
+    AliTrackReference const* GetTrackRefIter() const {return fTrackRefs[0];}
+
   protected:
     Int_t   fLabel;             // MC label  
     Int_t   fPDG;               // particle code
@@ -93,8 +95,7 @@ public:
   Int_t              GetLabel() const { return fMC ? fMC->fLabel:0; }
   Int_t              GetPDG() const { return fMC ? fMC->fPDG : 0; }
   ULong_t            GetStatus() const {return fESD.fStatus;}
-  AliTRDseedV1*      GetTracklet(Int_t entry) const;
-  AliTRDtrackV1 *               GetTRDtrack() const { return fTRDtrack; }
+  AliTRDtrackV1 *               GetTrack() const { return fTRDtrack; }
   AliTrackReference* GetTrackRef(Int_t entry) const;
   AliExternalTrackParam* GetOuterParam() const {return fOP;}
 
index d36a4db445da6480f41814f9dbbaa13e456cbf3b..a539ee267d37ec4327a1f203df56dbe46f148b8f 100644 (file)
@@ -181,7 +181,7 @@ void AliTRDtrackInfoGen::Exec(Option_t *){
   Int_t nTRD = 0, nTPC = 0, nclsTrklt;
   Int_t nTracks = fESD->GetNumberOfTracks();
   if(fDebugLevel>=1){ 
-    printf("%3d Tracks: ESD[%d] MC[%d]\n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracks, HasMCdata() ? mStack->GetNtrack() : 0);
+    printf("Entry[%3d] Tracks: ESD[%d] MC[%d]\n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTracks, HasMCdata() ? mStack->GetNtrack() : 0);
   }
   AliESDtrack *esdTrack = 0x0;
   AliESDfriendTrack *esdFriendTrack = 0x0;
@@ -266,13 +266,8 @@ void AliTRDtrackInfoGen::Exec(Option_t *){
       Int_t icalib = 0;
       while((calObject = esdFriendTrack->GetCalibObject(icalib++))){
         if(strcmp(calObject->IsA()->GetName(),"AliTRDtrackV1") != 0) continue; // Look for the TRDtrack
-        track = dynamic_cast<AliTRDtrackV1*>(calObject);
-        //nTRD++;
-        if(!esdTrack->GetNcls(2)){
-          printf("No TRD clusters but track\n");
-          nTRD++;  
-        }  
-        if(!track) continue;
+        if(!(track = dynamic_cast<AliTRDtrackV1*>(calObject))) break;
+        nTRD++;
         if(fDebugLevel>=3) printf("TRD track OK\n");
         fTrackInfo->SetTRDtrack(track);
         break;
@@ -281,20 +276,18 @@ void AliTRDtrackInfoGen::Exec(Option_t *){
     } else if(fDebugLevel>=2) printf("No ESD friends\n");
     if(op) fTrackInfo->SetOuterParam(op);
 
-    if(fDebugLevel >= 2){
-      Int_t ncls = esdTrack->GetNcls(2);
-      nclsTrklt = fTrackInfo->GetNumberOfClusters();
+    if(fDebugLevel >= 1){
+      AliTRDtrackInfo info(*fTrackInfo);
       (*fDebugStream) << "trackInfo"
-      << "ncls="       << ncls
-      << "Ncls="       << nclsTrklt
-      << "TrackInfo.=" << fTrackInfo
+      << "TrackInfo.=" << &info
       << "\n";
+      info.Delete("");
     }
   
     fContainer->Add(new AliTRDtrackInfo(*fTrackInfo));
     fTrackInfo->Delete("");
   }
-  if(fDebugLevel>=1) printf("%3d Tracks: TPC[%d] TRD[%d]\n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTPC, nTRD);
+  if(fDebugLevel>=2) printf("%3d Tracks: TPC[%d] TRD[%d]\n", (Int_t)AliAnalysisManager::GetAnalysisManager()->GetCurrentEntry(), nTPC, nTRD);
 
   // Insert also MC tracks which are passing TRD where the track is not reconstructed
   if(HasMCdata()){
@@ -335,11 +328,11 @@ void AliTRDtrackInfoGen::Exec(Option_t *){
       fTrackInfo->SetPrimary(mcParticle->Particle()->IsPrimary());
       fTrackInfo->SetLabel(itk);
       if(fDebugLevel >= 1){
-        Int_t ncls = esdTrack->GetNcls(2);
+        AliTRDtrackInfo info(*fTrackInfo);
         (*fDebugStream) << "trackInfo"
-        << "ntrackRefs=" << ncls
-        << "TrackInfo.=" << fTrackInfo
+        << "TrackInfo.=" << &info
         << "\n";
+        info.Delete("");
       }
       if(fDebugLevel > 2)printf("Registering rejected MC track with label %d\n", itk);
       fContainer->Add(new AliTRDtrackInfo(*fTrackInfo));
index 853d3bc4bbe9c68216a7886f5530fae093116d98..e7d7009032e065875d43628f3b34db378d4beb3f 100644 (file)
@@ -22,7 +22,6 @@ class AliTRDtrackInfo;
 class AliTRDeventInfo;
 class TObjArray;
 class TTreeSRedirector;
-
 class AliTRDtrackInfoGen : public AliTRDrecoTask{
 public:
 
index 51815de6c7da62c86da880cbd24f4f28c6b7de22..978102b56681688a72bcea73ddf0aa7f034209b3 100644 (file)
@@ -92,7 +92,7 @@ void AliTRDtrackingEfficiencyCombined::Exec(Option_t *){
                mom = 0.;
                trkInf = dynamic_cast<AliTRDtrackInfo *>(fTracks->UncheckedAt(itinf));
                if(!trkInf) continue;
-               if((TRDtrack = trkInf->GetTRDtrack()) || trkInf->GetNumberOfClustersRefit()){
+               if((TRDtrack = trkInf->GetTrack()) || trkInf->GetNumberOfClustersRefit()){
                        // check if allready found by the tracker
                        Bool_t found = kFALSE;
                        for(Int_t il = 0; il < naccepted; il++){
index 262f7942b1ffe00605f2528ee375a4e8262f46ce..81927fd01b8a3e6ec594a9cee5297752898a4152 100644 (file)
@@ -62,6 +62,8 @@ AliTRDtrackingResolution::AliTRDtrackingResolution()
   :AliTRDrecoTask("Resolution", "Tracking Resolution")
   ,fReconstructor(0x0)
   ,fGeo(0x0)
+  ,fGraphS(0x0)
+  ,fGraphM(0x0)
 {
   fReconstructor = new AliTRDReconstructor();
   fReconstructor->SetRecoParam(AliTRDrecoParam::GetLowFluxParam());
@@ -71,6 +73,8 @@ AliTRDtrackingResolution::AliTRDtrackingResolution()
 //________________________________________________________
 AliTRDtrackingResolution::~AliTRDtrackingResolution()
 {
+  if(fGraphS){fGraphS->Delete(); delete fGraphS;}
+  if(fGraphM){fGraphM->Delete(); delete fGraphM;}
   delete fGeo;
   delete fReconstructor;
   if(gGeoManager) delete gGeoManager;
@@ -87,99 +91,30 @@ void AliTRDtrackingResolution::CreateOutputObjects()
 
   // cluster to tracklet residuals [2]
   fContainer->AddAt(new TH2I("fYClRes", "Clusters Residuals", 21, -21., 21., 100, -.5, .5), kClusterYResidual);
-  // tracklet to Riemann fit residuals [2]
-  fContainer->AddAt(new TH2I("fYTrkltRRes", "Tracklet Riemann Residuals", 21, -21., 21., 100, -.5, .5), kTrackletRiemanYResidual);
-  fContainer->AddAt(new TH2I("fAngleTrkltRRes", "Tracklet Riemann Angular Residuals", 21, -21., 21., 100, -.5, .5), kTrackletRiemanAngleResidual);
-  fContainer->AddAt(new TH2I("fYTrkltKRes", "Tracklet Kalman Residuals", 21, -21., 21., 100, -.5, .5), kTrackletKalmanYResidual);
-  fContainer->AddAt(new TH2I("fAngleTrkltKRes", "Tracklet Kalman Angular Residuals", 21, -21., 21., 100, -.5, .5), kTrackletKalmanAngleResidual);
+//   // tracklet to Riemann fit residuals [2]
+//   fContainer->AddAt(new TH2I("fYTrkltRRes", "Tracklet Riemann Residuals", 21, -21., 21., 100, -.5, .5), kTrackletRiemanYResidual);
+//   fContainer->AddAt(new TH2I("fAngleTrkltRRes", "Tracklet Riemann Angular Residuals", 21, -21., 21., 100, -.5, .5), kTrackletRiemanAngleResidual);
+//   fContainer->AddAt(new TH2I("fYTrkltKRes", "Tracklet Kalman Residuals", 21, -21., 21., 100, -.5, .5), kTrackletKalmanYResidual);
+//   fContainer->AddAt(new TH2I("fAngleTrkltKRes", "Tracklet Kalman Angular Residuals", 21, -21., 21., 100, -.5, .5), kTrackletKalmanAngleResidual);
 
   // Resolution histos
   if(HasMCdata()){
-    // tracklet resolution [0]
-    fContainer->AddAt(new TH2I("fY", "Tracklet Resolution", 21, -21., 21., 100, -.5, .5), kTrackletYResolution);
+    // cluster y resolution [0]
+    fContainer->AddAt(new TH2I("fCY", "Cluster Resolution", 31, -31., 31., 100, -.5, .5), kClusterYResolution);
+    // tracklet y resolution [0]
+    fContainer->AddAt(new TH2I("fY", "Tracklet Resolution", 31, -31., 31., 100, -.5, .5), kTrackletYResolution);
     // tracklet angular resolution [1]
-    fContainer->AddAt(new TH2I("fPhi", "Tracklet Angular Resolution", 21, -21., 21., 100, -10., 10.), kTrackletAngleResolution);
-
-    // Riemann track resolution [y, z, angular]
-    fContainer->AddAt(new TH2I("fYRT", "Track Riemann Y Resolution", 21, -21., 21., 100, -.5, .5), kTrackRYResolution);
-    fContainer->AddAt(new TH2I("fZRT", "Track Riemann Z Resolution", 21, -21., 21., 100, -.5, .5), kTrackRZResolution);
-    fContainer->AddAt(new TH2I("fPhiRT", "Track Riemann Angular Resolution", 21, -21., 21., 100, -10., 10.), kTrackRAngleResolution);
-
-    // Kalman track resolution [y, z, angular]
-    fContainer->AddAt(new TH2I("fYKT", "", 21, -21., 21., 100, -.5, .5), kTrackKYResolution);
-    fContainer->AddAt(new TH2I("fZKT", "", 21, -21., 21., 100, -.5, .5), kTrackKZResolution);
-    fContainer->AddAt(new TH2I("fPhiKT", "", 21, -21., 21., 100, -10., 10.), kTrackKAngleResolution);
-  }
-
-  // CREATE GRAPHS for DISPLAY
-  
-  // define iterator over graphs
-  Int_t jgraph = (Int_t)kGraphStart;
-  TH2I *h2 = (TH2I *)(fContainer->At(kClusterYResidual));
-  // clusters tracklet residuals (mean-phi)
-  TH1 *h = new TH1I("h", "", 100, -40., 40.);
-  h->GetXaxis()->SetTitle("#Phi [deg]");
-  h->GetYaxis()->SetTitle("Clusters Residuals : #sigma/#mu [mm]");
-  h->GetYaxis()->SetRangeUser(-.05, 1.);
-  fContainer->AddAt(h, jgraph++);
-
-  TGraphErrors *g = new TGraphErrors(h2->GetNbinsX());
-  g->SetLineColor(kGreen);
-  g->SetMarkerStyle(22);
-  g->SetMarkerColor(kGreen);
-  g->SetNameTitle("clm", "Residuals Clusters-Tracklet Mean");
-  fContainer->AddAt(g, jgraph++);
-
-  // clusters tracklet residuals (sigma-phi)
-  g = new TGraphErrors(h2->GetNbinsX());
-  g->SetLineColor(kRed);
-  g->SetMarkerStyle(23);
-  g->SetMarkerColor(kRed);
-  g->SetNameTitle("cls", "Residuals Clusters-Tracklet Sigma");
-  fContainer->AddAt(g, jgraph++);
-
-  if(HasMCdata()){
-    // tracklet y resolution
-    h2 = (TH2I*)fContainer->At(kTrackletYResolution);
-    h = new TH1I("h", "", 100, -40., 40.);
-    h->GetXaxis()->SetTitle("#Phi [deg]");
-    h->GetYaxis()->SetTitle("Tracklet Resolution : #sigma/#mu [mm]");
-    h->GetYaxis()->SetRangeUser(-.05, 1.);
-    fContainer->AddAt(h, jgraph++);
-
-    g = new TGraphErrors(h2->GetNbinsX());
-    g->SetLineColor(kGreen);
-    g->SetMarkerStyle(22);
-    g->SetMarkerColor(kGreen);
-    g->SetNameTitle("trkltym", "Resolution Tracklet Y Mean");
-    fContainer->AddAt(g, jgraph++);
-    g = new TGraphErrors(h2->GetNbinsX());
-    g->SetLineColor(kRed);
-    g->SetMarkerStyle(22);
-    g->SetMarkerColor(kRed);
-    g->SetNameTitle("trkltys", "Resolution Tracklet Y Sigma");
-    fContainer->AddAt(g, jgraph++);
-
-    // tracklet phi resolution
-    h2 = (TH2I*)fContainer->At(kTrackletAngleResolution);
-    h = new TH1I("h", "", 100, -40., 40.);
-    h->GetXaxis()->SetTitle("#Phi [deg]");
-    h->GetYaxis()->SetTitle("Tracklet Angular Resolution : #sigma/#mu [deg]");
-    h->GetYaxis()->SetRangeUser(-.05, .2);
-    fContainer->AddAt(h, jgraph++);
-
-    g = new TGraphErrors(h2->GetNbinsX());
-    g->SetLineColor(kGreen);
-    g->SetMarkerStyle(22);
-    g->SetMarkerColor(kGreen);
-    g->SetNameTitle("trkltam", "Resolution Tracklet Y Mean");
-    fContainer->AddAt(g, jgraph++);
-    g = new TGraphErrors(h2->GetNbinsX());
-    g->SetLineColor(kRed);
-    g->SetMarkerStyle(22);
-    g->SetMarkerColor(kRed);
-    g->SetNameTitle("trkltas", "Angle Resolution Tracklet Sigma");
-    fContainer->AddAt(g, jgraph++);
+    fContainer->AddAt(new TH2I("fPhi", "Tracklet Angular Resolution", 31, -31., 31., 100, -10., 10.), kTrackletAngleResolution);
+
+//     // Riemann track resolution [y, z, angular]
+//     fContainer->AddAt(new TH2I("fYRT", "Track Riemann Y Resolution", 21, -21., 21., 100, -.5, .5), kTrackRYResolution);
+//     fContainer->AddAt(new TH2I("fZRT", "Track Riemann Z Resolution", 21, -21., 21., 100, -.5, .5), kTrackRZResolution);
+//     fContainer->AddAt(new TH2I("fPhiRT", "Track Riemann Angular Resolution", 21, -21., 21., 100, -10., 10.), kTrackRAngleResolution);
+// 
+//     Kalman track resolution [y, z, angular]
+//     fContainer->AddAt(new TH2I("fYKT", "", 21, -21., 21., 100, -.5, .5), kTrackKYResolution);
+//     fContainer->AddAt(new TH2I("fZKT", "", 21, -21., 21., 100, -.5, .5), kTrackKZResolution);
+//     fContainer->AddAt(new TH2I("fPhiKT", "", 21, -21., 21., 100, -10., 10.), kTrackKAngleResolution);
   }
 }
 
@@ -195,7 +130,7 @@ void AliTRDtrackingResolution::Exec(Option_t *)
   }
 
   Int_t pdg;
-  Double_t p, dy, dphi, dymc, dzmc, dphimc;
+  Double_t p, dy/*, dphi, dymc, dzmc, dphimc*/;
   Float_t fP[kNLayers], fX[kNLayers], fY[kNLayers], fZ[kNLayers], fPhi[kNLayers], fTheta[kNLayers]; // phi/theta angle per layer
   Bool_t fMCMap[kNLayers], fLayerMap[kNLayers]; // layer map
 
@@ -207,7 +142,7 @@ void AliTRDtrackingResolution::Exec(Option_t *)
   for(Int_t iTI = 0; iTI < nTrackInfos; iTI++){
     // check if ESD and MC-Information are available
     if(!(fInfo = dynamic_cast<AliTRDtrackInfo *>(fTracks->UncheckedAt(iTI)))) continue;
-    if(!(fTrack = fInfo->GetTRDtrack())) continue;
+    if(!(fTrack = fInfo->GetTrack())) continue;
     if(!(fOp = fInfo->GetOuterParam())) continue;
     pdg = fInfo->GetPDG();
 
@@ -303,51 +238,51 @@ void AliTRDtrackingResolution::Exec(Option_t *)
     }
 
 
-    // this protection we might drop TODO
-    if(fTrack->GetNumberOfTracklets() < 6) continue;
-
-    AliTRDtrackerV1::FitRiemanTilt(fTrack, 0x0, kTRUE, npts, tr);
-    Int_t iref = 0;
-    for(Int_t ip=0; ip<kNLayers; ip++){
-      if(!fLayerMap[ip]) continue;
-      fTracklet = fTrack->GetTracklet(ip);
-      // recalculate fit based on the new tilt correction
-      fTracklet->Fit();
-
-      dy = fTracklet->GetYfit(0) - tr[iref].GetY();
-      ((TH2I*)fContainer->At(kTrackletRiemanYResidual))->Fill(fPhi[ip]*TMath::RadToDeg(), dy);
-
-      dphi = fTracklet->GetYfit(1)- fTracklet->GetYref(1);
-      ((TH2I*)fContainer->At(kTrackletRiemanAngleResidual))->Fill(fPhi[ip]*TMath::RadToDeg(), dphi);
-
-      if(HasMCdata()){
-        dymc = fY[ip] - tr[iref].GetY();
-        ((TH2I*)fContainer->At(kTrackRYResolution))->Fill(fPhi[ip]*TMath::RadToDeg(), dymc);
-
-        dzmc = fZ[ip] - tr[iref].GetZ();
-        ((TH2I*)fContainer->At(kTrackRZResolution))->Fill(fPhi[ip]*TMath::RadToDeg(), dzmc);
-
-        dphimc = fPhi[ip] - fTracklet->GetYfit(1);
-        ((TH2I*)fContainer->At(kTrackRAngleResolution))->Fill(fPhi[ip]*TMath::RadToDeg(), dphimc);
-      }
-
-      iref++;
-
-      if(fDebugLevel>=2){
-        (*fDebugStream) << "RiemannTrack"
-          << "ly="    << ip
-          << "mc="    << fMCMap[ip]
-          << "p="     << fP[ip]
-          << "phi="   << fPhi[ip]
-          << "tht="   << fTheta[ip]
-          << "dy="    << dy
-          << "dphi="  << dphi
-          << "dymc="  << dymc
-          << "dzmc="  << dzmc
-          << "dphimc="<< dphimc
-          << "\n";
-      }
-    }
+//     // this protection we might drop TODO
+//     if(fTrack->GetNumberOfTracklets() < 6) continue;
+// 
+//     AliTRDtrackerV1::FitRiemanTilt(fTrack, 0x0, kTRUE, npts, tr);
+//     Int_t iref = 0;
+//     for(Int_t ip=0; ip<kNLayers; ip++){
+//       if(!fLayerMap[ip]) continue;
+//       fTracklet = fTrack->GetTracklet(ip);
+//       // recalculate fit based on the new tilt correction
+//       fTracklet->Fit();
+// 
+//       dy = fTracklet->GetYfit(0) - tr[iref].GetY();
+//       ((TH2I*)fContainer->At(kTrackletRiemanYResidual))->Fill(fPhi[ip]*TMath::RadToDeg(), dy);
+// 
+//       dphi = fTracklet->GetYfit(1)- fTracklet->GetYref(1);
+//       ((TH2I*)fContainer->At(kTrackletRiemanAngleResidual))->Fill(fPhi[ip]*TMath::RadToDeg(), dphi);
+// 
+//       if(HasMCdata()){
+//         dymc = fY[ip] - tr[iref].GetY();
+//         ((TH2I*)fContainer->At(kTrackRYResolution))->Fill(fPhi[ip]*TMath::RadToDeg(), dymc);
+// 
+//         dzmc = fZ[ip] - tr[iref].GetZ();
+//         ((TH2I*)fContainer->At(kTrackRZResolution))->Fill(fPhi[ip]*TMath::RadToDeg(), dzmc);
+// 
+//         dphimc = fPhi[ip] - fTracklet->GetYfit(1);
+//         ((TH2I*)fContainer->At(kTrackRAngleResolution))->Fill(fPhi[ip]*TMath::RadToDeg(), dphimc);
+//       }
+// 
+//       iref++;
+// 
+//       if(fDebugLevel>=1){
+//         (*fDebugStream) << "RiemannTrack"
+//           << "ly="    << ip
+//           << "mc="    << fMCMap[ip]
+//           << "p="     << fP[ip]
+//           << "phi="   << fPhi[ip]
+//           << "tht="   << fTheta[ip]
+//           << "dy="    << dy
+//           << "dphi="  << dphi
+//           << "dymc="  << dymc
+//           << "dzmc="  << dzmc
+//           << "dphimc="<< dphimc
+//           << "\n";
+//       }
+//     }
 
 //  if(!gGeoManager) TGeoManager::Import("geometry.root");
 //     AliTRDtrackerV1::FitKalman(fTrack, 0x0, kFALSE, nc, tr);
@@ -377,35 +312,48 @@ void AliTRDtrackingResolution::GetRefFigure(Int_t ifig)
   TAxis *ax = 0x0;
   TGraphErrors *g = 0x0;
   switch(ifig){
-  case 0:
-    g = (TGraphErrors*)fContainer->At(kGraphStart+1);
+  case kClusterYResidual:
+    g = (TGraphErrors*)fGraphS->At(kClusterYResidual);
     g->Draw("apl");
     ax = g->GetHistogram()->GetYaxis();
-    ax->SetRangeUser(-.1, 1.);
+    ax->SetRangeUser(-.5, 1.);
     ax->SetTitle("Clusters Y Residuals #sigma/#mu [mm]");
     ax = g->GetHistogram()->GetXaxis();
     ax->SetTitle("#phi [deg]");
-    ((TGraphErrors*)fContainer->At(kGraphStart+2))->Draw("pl");
+    ((TGraphErrors*)fGraphM->At(kClusterYResidual))->Draw("pl");
     break;
-  case 1:
-    g = (TGraphErrors*)fContainer->At(kGraphStart+4);
+  case kClusterYResolution:
+    g = (TGraphErrors*)fGraphS->At(kClusterYResolution);
     ax = g->GetHistogram()->GetYaxis();
-    ax->SetRangeUser(-.1, 1.);
+    ax->SetRangeUser(-.5, 1.);
+    ax->SetTitle("Cluster Y Resolution #sigma/#mu [mm]");
+    ax = g->GetHistogram()->GetXaxis();
+    ax->SetTitle("#phi [deg]");
+    g->Draw("apl");
+    ((TGraphErrors*)fGraphM->At(kClusterYResolution))->Draw("pl");
+    break;
+  case kTrackletYResolution:
+    g = (TGraphErrors*)fGraphS->At(kTrackletYResolution);
+    ax = g->GetHistogram()->GetYaxis();
+    ax->SetRangeUser(-.5, 1.);
     ax->SetTitle("Tracklet Y Resolution #sigma/#mu [mm]");
     ax = g->GetHistogram()->GetXaxis();
     ax->SetTitle("#phi [deg]");
     g->Draw("apl");
-    ((TGraphErrors*)fContainer->At(kGraphStart+5))->Draw("pl");
+    ((TGraphErrors*)fGraphM->At(kTrackletYResolution))->Draw("pl");
     break;
-  case 2:
-    g = (TGraphErrors*)fContainer->At(kGraphStart+7);
+  case kTrackletAngleResolution:
+    g = (TGraphErrors*)fGraphS->At(kTrackletAngleResolution);
     ax = g->GetHistogram()->GetYaxis();
     ax->SetRangeUser(-.1, 1.);
-    ax->SetTitle("Tracklet Angular Resolution #sigma/#mu [deg]");
+    ax->SetTitle("Tracklet Angular Resolution #sigma/#mu [mrad]");
     ax = g->GetHistogram()->GetXaxis();
     ax->SetTitle("#phi [deg]");
     g->Draw("apl");
-    ((TGraphErrors*)fContainer->At(kGraphStart+8))->Draw("pl");
+    ((TGraphErrors*)fGraphM->At(kTrackletAngleResolution))->Draw("pl");
+    break;
+  default:
+    AliInfo(Form("Reference plot [%d] not implemented yet", ifig));
     break;
   }
 }
@@ -419,6 +367,8 @@ Bool_t AliTRDtrackingResolution::Resolution(AliTRDseedV1 *tracklet, AliTRDtrackI
   Float_t x0  = tracklet->GetX0();
   Float_t tilt= tracklet->GetTilt();
   Int_t cross = tracklet->GetNChange();
+  Int_t det = tracklet->GetDetector();
+  Int_t pdg = fInfo->GetPDG();
 
   // check for 2 track ref where the radial position has a distance less than 3.7mm
   Int_t nFound = 0;
@@ -439,23 +389,17 @@ Bool_t AliTRDtrackingResolution::Resolution(AliTRDseedV1 *tracklet, AliTRDtrackI
 
   // RESOLUTION
   Double_t dx = fTrackRefs[1]->LocalX() - fTrackRefs[0]->LocalX();
-  if(dx <= 0.){
-    if(fDebugLevel>=3) printf("\t\tTrack ref in the wrong order refX0[%6.3f] refX1[%6.3f]\n", fTrackRefs[0]->LocalX(), fTrackRefs[1]->LocalX());
+  if(dx <= 0. || TMath::Abs(dx-3.7)>1.E-3){
+    if(fDebugLevel>=3) printf("\t\tTrack ref with wrong radial distances refX0[%6.3f] refX1[%6.3f]\n", fTrackRefs[0]->LocalX(), fTrackRefs[1]->LocalX());
     return kFALSE;
   }
+
   Double_t dydx = (fTrackRefs[1]->LocalY() - fTrackRefs[0]->LocalY()) / dx;
   Double_t dzdx = (fTrackRefs[1]->Z() - fTrackRefs[0]->Z()) / dx;
   Double_t dx0 = fTrackRefs[1]->LocalX() - tracklet->GetX0();
   ymc =  fTrackRefs[1]->LocalY() - dydx*dx0;
   zmc =  fTrackRefs[1]->Z() - dzdx*dx0;
   
-
-//   Float_t sy0   = tracklet->GetYfit(0);
-//   Float_t sdydx = tracklet->GetYfit(1);
-//   Float_t rdzdx = tracklet->GetZref(1);
-//   Float_t rdydx = tracklet->GetYref(1);
-
-
   // recalculate tracklet based on the MC info
   AliTRDseedV1 tt(*tracklet);
   tt.SetZref(0, zmc);
@@ -475,14 +419,11 @@ Bool_t AliTRDtrackingResolution::Resolution(AliTRDseedV1 *tracklet, AliTRDtrackI
   if(fDebugLevel>=4) printf("\t\tdx[%6.4f] dy[%6.4f] dz[%6.4f] dphi[%6.4f] \n", dx, dy, dz, dphi);
   
   // Fill Histograms
-  if(TMath::Abs(dx-3.7)<1.E-3){
-    ((TH2I*)fContainer->At(kTrackletYResolution))->Fill(phi*TMath::RadToDeg(), dy);
-    ((TH2I*)fContainer->At(kTrackletAngleResolution))->Fill(phi*TMath::RadToDeg(), dphi*TMath::RadToDeg());
-  }        
+  ((TH2I*)fContainer->At(kTrackletYResolution))->Fill(phi*TMath::RadToDeg(), dy);
+  ((TH2I*)fContainer->At(kTrackletAngleResolution))->Fill(phi*TMath::RadToDeg(), dphi*TMath::RadToDeg());
+
   // Fill Debug Tree
-  if(fDebugLevel>=2){
-    Int_t det = tracklet->GetDetector();
-    Int_t pdg = fInfo->GetPDG();
+  if(fDebugLevel>=1){
     (*fDebugStream) << "ResolutionTrklt"
       << "det="                  << det
       << "pdg="     << pdg
@@ -496,21 +437,28 @@ Bool_t AliTRDtrackingResolution::Resolution(AliTRDseedV1 *tracklet, AliTRDtrackI
       << "dz="           << dz
       << "dphi="               << dphi
       << "\n";
+  }
+
+  AliTRDpadPlane *pp = fGeo->GetPadPlane(AliTRDgeometry::GetLayer(det), AliTRDgeometry::GetStack(det));
+  Float_t z0 = pp->GetRow0() + AliTRDSimParam::Instance()->GetAnodeWireOffset();
+
+  AliTRDcluster *c = 0x0;
+  tracklet->ResetClusterIter(kFALSE);
+  while((c = tracklet->PrevCluster())){
+    Float_t  q = TMath::Abs(c->GetQ());
+    Float_t xc = c->GetX();
+    Float_t yc = c->GetY();
+    Float_t zc = c->GetZ();
+    dx = x0 - xc; 
+    Float_t yt = ymc - dx*dydx;
+    Float_t zt = zmc - dx*dzdx; 
+    dy = yt - (yc - tilt*(zc-zt));
+
+    // Fill Histograms
+    if(q>100.) ((TH2I*)fContainer->At(kClusterYResolution))->Fill(phi*TMath::RadToDeg(), dy);
     
-    AliTRDpadPlane *pp = fGeo->GetPadPlane(AliTRDgeometry::GetLayer(det), AliTRDgeometry::GetStack(det));
-    Float_t z0 = pp->GetRow0() + AliTRDSimParam::Instance()->GetAnodeWireOffset();
-
-    AliTRDcluster *c = 0x0;
-    tracklet->ResetClusterIter(kFALSE);
-    while((c = tracklet->PrevCluster())){
-      Float_t  q = TMath::Abs(c->GetQ());
-      Float_t xc = c->GetX();
-      Float_t yc = c->GetY();
-      Float_t zc = c->GetZ();
-      dx = x0 - xc; 
-      Float_t yt = ymc - dx*dydx;
-      Float_t zt = zmc - dx*dzdx; 
-      dy = yt - (yc - tilt*(zc-zt));
+    // Fill Debug Tree
+    if(fDebugLevel>=1){
       Float_t d = z0 - zt;
       d -= ((Int_t)(2 * d)) / 2.0;
       (*fDebugStream) << "ResolutionClstr"
@@ -533,28 +481,45 @@ Bool_t AliTRDtrackingResolution::Resolution(AliTRDseedV1 *tracklet, AliTRDtrackI
 Bool_t AliTRDtrackingResolution::PostProcess()
 {
   //fContainer = dynamic_cast<TObjArray*>(GetOutputData(0));
-  fNRefFigures = 0;
   if (!fContainer) {
     Printf("ERROR: list not available");
     return kFALSE;
   }
+  fNRefFigures = fContainer->GetEntriesFast();
+  if(!fGraphS){ 
+    fGraphS = new TObjArray(fNRefFigures);
+    fGraphS->SetOwner();
+  }
+  if(!fGraphM){ 
+    fGraphM = new TObjArray(fNRefFigures);
+    fGraphM->SetOwner();
+  }
 
   TH2I *h2 = 0x0;
   TH1D *h = 0x0;
   TGraphErrors *gm = 0x0, *gs = 0x0;
+
+  // define models
   TF1 f("f1", "gaus", -.5, .5);  
-  // define iterator over graphs
-  Int_t jgraph = (Int_t)kGraphStart;
+
+  TF1 fc("fc", "[0]*exp(-0.5*((x-[1])/[2])**2)+[3]*exp(-0.5*((x-[4])/[5])**2)", -.5, .5);
 
   //PROCESS RESIDUAL DISTRIBUTIONS
 
   // Clusters residuals
-  // define model
-  TF1 fc("fc", "[0]*exp(-0.5*((x-[1])/[2])**2)+[3]*exp(-0.5*((x-[4])/[5])**2)", -.5, .5);
   h2 = (TH2I *)(fContainer->At(kClusterYResidual));
-  jgraph++; //skip the frame histo 
-  gm = (TGraphErrors*)fContainer->At(jgraph++);
-  gs = (TGraphErrors*)fContainer->At(jgraph++);
+  gm = new TGraphErrors(h2->GetNbinsX());
+  gm->SetLineColor(kRed);
+  gm->SetMarkerStyle(23);
+  gm->SetMarkerColor(kRed);
+  gm->SetNameTitle("clm", "");
+  fGraphM->AddAt(gm, kClusterYResidual);
+  gs = new TGraphErrors(h2->GetNbinsX());
+  gs->SetLineColor(kRed);
+  gs->SetMarkerStyle(23);
+  gs->SetMarkerColor(kRed);
+  gs->SetNameTitle("cls", "");
+  fGraphS->AddAt(gs, kClusterYResidual);
   for(Int_t ibin = 1; ibin <= h2->GetNbinsX(); ibin++){
     Double_t phi = h2->GetXaxis()->GetBinCenter(ibin);
     Double_t dphi = h2->GetXaxis()->GetBinWidth(ibin)/2;
@@ -565,46 +530,85 @@ Bool_t AliTRDtrackingResolution::PostProcess()
     gs->SetPoint(ibin - 1, phi, 10.*fc.GetParameter(2));
     gs->SetPointError(ibin - 1, dphi, 10.*fc.GetParError(2));
   }
-  fNRefFigures++;
 
 
   //PROCESS RESOLUTION DISTRIBUTIONS
+
   if(HasMCdata()){
+    // cluster y resolution
+    h2 = (TH2I*)fContainer->At(kClusterYResolution);
+    gm = new TGraphErrors(h2->GetNbinsX());
+    gm->SetLineColor(kRed);
+    gm->SetMarkerStyle(23);
+    gm->SetMarkerColor(kRed);
+    gm->SetNameTitle("clym", "");
+    fGraphM->AddAt(gm, kClusterYResolution);
+    gs = new TGraphErrors(h2->GetNbinsX());
+    gs->SetLineColor(kRed);
+    gs->SetMarkerStyle(23);
+    gs->SetMarkerColor(kRed);
+    gs->SetNameTitle("clys", "");
+    fGraphS->AddAt(gs, kClusterYResolution);
+    for(Int_t iphi=1; iphi<=h2->GetNbinsX(); iphi++){
+      h = h2->ProjectionY("py", iphi, iphi);
+      Fit(h, &fc);
+      Double_t phi = h2->GetXaxis()->GetBinCenter(iphi);
+      Int_t jphi = iphi -1;
+      gm->SetPoint(jphi, phi, 10.*f.GetParameter(1));
+      gm->SetPointError(jphi, 0., 10.*f.GetParError(1));
+      gs->SetPoint(jphi, phi, 10.*f.GetParameter(2));
+      gs->SetPointError(jphi, 0., 10.*f.GetParError(2));
+    }
+  
     // tracklet y resolution
     h2 = (TH2I*)fContainer->At(kTrackletYResolution);
-    jgraph++; //skip the frame histo
-    gm = (TGraphErrors*)fContainer->At(jgraph++);
-    gs = (TGraphErrors*)fContainer->At(jgraph++);
+    gm = new TGraphErrors(h2->GetNbinsX());
+    gm->SetLineColor(kRed);
+    gm->SetMarkerStyle(23);
+    gm->SetMarkerColor(kRed);
+    gm->SetNameTitle("trkltym", "");
+    fGraphM->AddAt(gm, kTrackletYResolution);
+    gs = new TGraphErrors(h2->GetNbinsX());
+    gs->SetLineColor(kRed);
+    gs->SetMarkerStyle(23);
+    gs->SetMarkerColor(kRed);
+    gs->SetNameTitle("trkltys", "");
+    fGraphS->AddAt(gs, kTrackletYResolution);
     for(Int_t iphi=1; iphi<=h2->GetNbinsX(); iphi++){
-      Double_t phi = h2->GetXaxis()->GetBinCenter(iphi);
-      f.SetParameter(1, 0.);f.SetParameter(2, 2.e-2);
       h = h2->ProjectionY("py", iphi, iphi);
       Fit(h, &fc);
+      Double_t phi = h2->GetXaxis()->GetBinCenter(iphi);
       Int_t jphi = iphi -1;
       gm->SetPoint(jphi, phi, 10.*f.GetParameter(1));
       gm->SetPointError(jphi, 0., 10.*f.GetParError(1));
       gs->SetPoint(jphi, phi, 10.*f.GetParameter(2));
       gs->SetPointError(jphi, 0., 10.*f.GetParError(2));
     }
-    fNRefFigures++;
   
     // tracklet phi resolution
     h2 = (TH2I*)fContainer->At(kTrackletAngleResolution);
-    jgraph++; //skip the frame histo
-    gm = (TGraphErrors*)fContainer->At(jgraph++);
-    gs = (TGraphErrors*)fContainer->At(jgraph++);
+    gm = new TGraphErrors(h2->GetNbinsX());
+    gm->SetLineColor(kRed);
+    gm->SetMarkerStyle(23);
+    gm->SetMarkerColor(kRed);
+    gm->SetNameTitle("trkltym", "");
+    fGraphM->AddAt(gm, kTrackletAngleResolution);
+    gs = new TGraphErrors(h2->GetNbinsX());
+    gs->SetLineColor(kRed);
+    gs->SetMarkerStyle(23);
+    gs->SetMarkerColor(kRed);
+    gs->SetNameTitle("trkltys", "");
+    fGraphS->AddAt(gs, kTrackletAngleResolution);
     for(Int_t iphi=1; iphi<=h2->GetNbinsX(); iphi++){
-      Double_t phi = h2->GetXaxis()->GetBinCenter(iphi);
-      f.SetParameter(1, 0.);f.SetParameter(2, 2.e-2);
       h = h2->ProjectionY("py", iphi, iphi);
       h->Fit(&f, "QN", "", -.5, .5);
+      Double_t phi = h2->GetXaxis()->GetBinCenter(iphi);
       Int_t jphi = iphi -1;
       gm->SetPoint(jphi, phi, f.GetParameter(1));
       gm->SetPointError(jphi, 0., f.GetParError(1));
       gs->SetPoint(jphi, phi, f.GetParameter(2));
       gs->SetPointError(jphi, 0., f.GetParError(2));
     }
-    fNRefFigures++;
   }
 
   return kTRUE;
@@ -656,7 +660,7 @@ void AliTRDtrackingResolution::Fit(TH1 *h, TF1 *f)
 //________________________________________________________
 TObjArray* AliTRDtrackingResolution::Histos()
 {
-  if(!fContainer) fContainer  = new TObjArray(25);
+  if(!fContainer) fContainer  = new TObjArray(4);
   return fContainer;
 }
 
index 8cf64e3be12df6c121778fd59400badbc72be0c0..cdda8c3e0bdc43db8182a0a80718f389b1fa8a60 100644 (file)
@@ -17,6 +17,7 @@
 
 class TH1;
 class TF1;
+class TObjArray;
 class AliTRDReconstructor;
 class AliTRDgeometry;
 class AliTRDrecoParam;
@@ -27,19 +28,19 @@ class AliTRDtrackingResolution : public AliTRDrecoTask
 public:
   enum{
     kClusterYResidual         = 0
-    ,kTrackletRiemanYResidual = 1 // Riemann track model
-    ,kTrackletRiemanAngleResidual = 2
-    ,kTrackletKalmanYResidual = 3 // Kalman track model
-    ,kTrackletKalmanAngleResidual = 4
-    ,kTrackletYResolution     = 5
-    ,kTrackletAngleResolution = 6
-    ,kTrackRYResolution       = 7 // Riemann track model
-    ,kTrackRZResolution       = 8
-    ,kTrackRAngleResolution   = 9
-    ,kTrackKYResolution       = 10 // Kalman track model
-    ,kTrackKZResolution       = 11
-    ,kTrackKAngleResolution   = 12
-    ,kGraphStart              = 13 // First graph
+//     ,kTrackletRiemanYResidual = 1 // Riemann track model
+//     ,kTrackletRiemanAngleResidual = 2
+//     ,kTrackletKalmanYResidual = 3 // Kalman track model
+//     ,kTrackletKalmanAngleResidual = 4
+    ,kClusterYResolution      = 1/*5*/
+    ,kTrackletYResolution     = 2/*6*/
+    ,kTrackletAngleResolution = 3/*7*/
+//     ,kTrackRYResolution       = 8 // Riemann track model
+//     ,kTrackRZResolution       = 9
+//     ,kTrackRAngleResolution   = 10
+//     ,kTrackKYResolution       = 11 // Kalman track model
+//     ,kTrackKZResolution       = 12
+//     ,kTrackKAngleResolution   = 13
   };
 
   AliTRDtrackingResolution();
@@ -66,6 +67,8 @@ private:
   
   AliTRDReconstructor   *fReconstructor;  //! local reconstructor
   AliTRDgeometry        *fGeo;            //! TRD geometry
+  TObjArray             *fGraphS;         //! result holder - sigma values
+  TObjArray             *fGraphM;         //! result holder - mean values
   ClassDef(AliTRDtrackingResolution, 1) // tracking resolution task
 };
 #endif
index f44b4fb65b4612467437b169da2e3d7d36a2d5fb..ab513ad56bcf50f27c8c2818d70a08151f59d12f 100644 (file)
@@ -135,7 +135,7 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0, Int_t nmax=-1)
   // TRD track summary generator
   mgr->AddTask(task = new AliTRDtrackInfoGen());
   taskPtr[(Int_t)kInfoGen] = task;
-  task->SetDebugLevel(0);
+  task->SetDebugLevel(1);
   task->SetMCdata(fHasMCdata);
   // Create containers for input/output
   AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("data", TChain::Class(), AliAnalysisManager::kInputContainer);
@@ -190,7 +190,7 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0, Int_t nmax=-1)
     taskPtr[(Int_t)kTrackingResolution] = task;
     task->SetMCdata(fHasMCdata);
     task->SetPostProcess(kFALSE);
-    task->SetDebugLevel(2);
+    task->SetDebugLevel(1);
     
     // Create containers for input/output
     mgr->ConnectInput( task, 0, coutput1);