]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliGlobalQADataMaker.cxx
Fix for Savannah bug report 59287
[u/mrichter/AliRoot.git] / STEER / AliGlobalQADataMaker.cxx
index dfe17c3f68f300887f1e136f9e99c91fa7a72a9d..fcafd332ac96be022a9333e6e2f8ff4a5b365f7a 100644 (file)
 ClassImp(AliGlobalQADataMaker)
  
 //____________________________________________________________________________ 
-void AliGlobalQADataMaker::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list)
+void AliGlobalQADataMaker::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray ** list)
 {
   //Detector specific actions at end of cycle
   // do the QA checking
-  AliQAChecker::Instance()->Run(AliQA::kGLOBAL, task, list) ;  
+  AliQAChecker::Instance()->Run(AliQAv1::kGLOBAL, task, list) ;  
 }
 
 //____________________________________________________________________________ 
@@ -37,70 +37,99 @@ void AliGlobalQADataMaker::InitRecPoints() {
   // This function books the histograms of *track*residuals*
   // as a part of global QA
   //------------------------------------------------------
-  Char_t *name[]={
+  const Char_t *name[]={
+    "hGlobalSPD1ResidualsY","SPD1ResidualsZ",
+    "hGlobalSPD2ResidualsY","SPD2ResidualsZ",
+    "hGlobalSDD1ResidualsY","SDD1ResidualsZ",
+    "hGlobalSDD2ResidualsY","SDD2ResidualsZ",
+    "hGlobalSSD1ResidualsY","SSD1ResidualsZ",
+    "hGlobalSSD2ResidualsY","SSD2ResidualsZ",
+    
+    "hGlobalTPC1ResidualsY","TPC1ResidualsZ",
+    "hGlobalTPC2ResidualsY","TPC2ResidualsZ",
+    
+    "hGlobalTRD1ResidualsY","TRD1ResidualsZ",
+    "hGlobalTRD2ResidualsY","TRD2ResidualsZ",
+    "hGlobalTRD3ResidualsY","TRD3ResidualsZ",
+    "hGlobalTRD4ResidualsY","TRD4ResidualsZ",
+    "hGlobalTRD5ResidualsY","TRD5ResidualsZ",
+    "hGlobalTRD6ResidualsY","TRD6ResidualsZ",
+    
+    "hGlobalTOFResidualsY","TOFResidualsZ",
+    
+    "hGlobalPHOS1ResidualsY","PHOS1ResidualsZ",
+    "hGlobalPHOS2ResidualsY","PHOS2ResidualsZ",
+    
+    "hGlobalHMPIDResidualsY","HMPIDResidualsZ",
+    
+    "hGlobalMUONResidualsY","MUONResidualsZ",
+    
+    "hGlobalEMCALResidualsY","EMCALResidualsZ"
+  };
+  const Char_t *title[]={
     "SPD1 residuals Y","SPD1 residuals Z",
     "SPD2 residuals Y","SPD2 residuals Z",
     "SDD1 residuals Y","SDD1 residuals Z",
     "SDD2 residuals Y","SDD2 residuals Z",
     "SSD1 residuals Y","SSD1 residuals Z",
     "SSD2 residuals Y","SSD2 residuals Z",
-
+    
     "TPC1 residuals Y","TPC1 residuals Z",
     "TPC2 residuals Y","TPC2 residuals Z",
-
+    
     "TRD1 residuals Y","TRD1 residuals Z",
     "TRD2 residuals Y","TRD2 residuals Z",
     "TRD3 residuals Y","TRD3 residuals Z",
     "TRD4 residuals Y","TRD4 residuals Z",
     "TRD5 residuals Y","TRD5 residuals Z",
     "TRD6 residuals Y","TRD6 residuals Z",
-
+    
     "TOF residuals Y","TOF residuals Z",
-
+    
     "PHOS1 residuals Y","PHOS1 residuals Z",
     "PHOS2 residuals Y","PHOS2 residuals Z",
-
+    
     "HMPID residuals Y","HMPID residuals Z",
-
+    
     "MUON residuals Y","MUON residuals Z",
-
+    
     "EMCAL residuals Y","EMCAL residuals Z"
   };
-
+  
   for (Int_t m=1; m<AliGeomManager::kLastLayer; m++) {
     Int_t i=2*m-2;
-    TH1F *h=new TH1F(name[i],name[i],100,-5.,5.);
+    TH1F *h=new TH1F(name[i],title[i],100,-5.,5.);
     Add2RecPointsList(h,i);    
-    h=new TH1F(name[i+1],name[i+1],100,-5.,5.);
+    h=new TH1F(name[i+1],title[i+1],100,-5.,5.);
     Add2RecPointsList(h,i+1);    
   }
 
   Add2RecPointsList(
-  new TH1F("SSD1 absolute residuals Y for Z<0 (cm)",
-           "SSD1 absolute residuals Y for Z<0 (cm)",100,-2.,2.),40);
+  new TH1F("hGlobalSSD1AbsoluteResidualsYNegZ",
+           "SSD1 Absolute Residuals Y Neg Z",100,-2.,2.),40);
   Add2RecPointsList(
-  new TH1F("SSD1 absolute residuals Z for Z<0 (cm)",
-           "SSD1 absolute residuals Z for Z<0 (cm)",100,-2.,2.),41);
+  new TH1F("hGlobalSSD1AbsoluteResidualsZNegZ",
+           "SSD1 Absolute Residuals Z Neg Z",100,-2.,2.),41);
   Add2RecPointsList(
-  new TH1F("SSD1 absolute residuals Y for Z>0 (cm)",
-           "SSD1 absolute residuals Y for Z>0 (cm)",100,-2.,2.),42);
+  new TH1F("hGlobalSSD1AbsoluteResidualsYPosZ",
+           "SSD1 Absolute Residuals Y Pos Z",100,-2.,2.),42);
   Add2RecPointsList(
-  new TH1F("SSD1 absolute residuals Z for Z>0 (cm)",
-           "SSD1 absolute residuals Z for Z>0 (cm)",100,-2.,2.),43);
+  new TH1F("hGlobalSSD1AbsoluteResidualsZPosZ",
+           "SSD1 Absolute Residuals Z Pos Z",100,-2.,2.),43);
 
 
   Add2RecPointsList(
-  new TH1F("SSD2 absolute residuals Y for Z<0 (cm)",
-           "SSD2 absolute residuals Y for Z<0 (cm)",100,-3.,3.),44);
+  new TH1F("hGlobalSSD2AbsoluteResidualsYNegZ",
+           "SSD2 Absolute Residuals Y Neg Z",100,-3.,3.),44);
   Add2RecPointsList(
-  new TH1F("SSD2 absolute residuals Z for Z<0 (cm)",
-           "SSD2 absolute residuals Z for Z<0 (cm)",100,-3.,3.),45);
+  new TH1F("hGlobalSSD2AbsoluteResidualsZNegZ",
+           "SSD2 Absolute Residuals Z Neg Z",100,-3.,3.),45);
   Add2RecPointsList(
-  new TH1F("SSD2 absolute residuals Y for Z>0 (cm)",
-           "SSD2 absolute residuals Y for Z>0 (cm)",100,-3.,3.),46);
+  new TH1F("hGlobalSSD2AbsoluteResidualsYPosZ",
+           "SSD2 Absolute Residuals Y Pos Z",100,-3.,3.),46);
   Add2RecPointsList(
-  new TH1F("SSD2 absolute residuals Z for Z>0 (cm)",
-           "SSD2 absolute residuals Z for Z>0 (cm)",100,-3.,3.),47);
+  new TH1F("hGlobalSSD2AbsoluteResidualsZPosZ",
+           "SSD2Absolute Residuals Z Pos Z",100,-3.,3.),47);
   
 }
 
@@ -111,54 +140,97 @@ void AliGlobalQADataMaker::InitESDs() {
   // as a part of global QA
   //------------------------------------------------------
 
-  {// Cluster related QA
-  Char_t *name[]={
-    "Fraction of the assigned clusters in ITS",
-    "Fraction of the assigned clusters in TPC",
-    "Fraction of the assigned clusters in TRD"
-  };
-  Add2ESDsList(new TH1F(name[0],name[0],100,0.,2.),kClr0);
-  Add2ESDsList(new TH1F(name[1],name[1],100,0.,2.),kClr1);
-  Add2ESDsList(new TH1F(name[2],name[2],100,0.,2.),kClr2);
+  const Bool_t expert   = kTRUE ; 
+  const Bool_t image    = kTRUE ; 
+ {// Cluster related QA
+    const Char_t *name[]={
+      "hGlobalFractionAssignedClustersITS",
+      "hGlobalFractionAssignedClustersTPC",
+      "hGlobalFractionAssignedClustersTRD"
+    };
+    const Char_t *title[]={
+      "Fraction of the assigned clusters in ITS",
+      "Fraction of the assigned clusters in TPC",
+      "Fraction of the assigned clusters in TRD"
+    };
+    Add2ESDsList(new TH1F(name[0],title[0],100,0.,2.),kClr0, !expert, image);
+    Add2ESDsList(new TH1F(name[1],title[1],100,0.,2.),kClr1, !expert, image);
+    Add2ESDsList(new TH1F(name[2],title[2],100,0.,2.),kClr2, !expert, image);
   }
 
   {// Track related QA
-  Char_t *name[]={
-    "Track azimuthal distribution (rad)",                   // kTrk0
-    "Track pseudo-rapidity distribution",                   // kTrk1
-    "TPC: track momentum distribution (GeV)",               // kTrk2
-    "TPC-ITS matched: track momentum distribution (GeV)",   // kTrk3
-    "TPC-TOF matched: track momentum distribution (GeV)",   // kTrk4
-    "TPC-ITS track-matching probability",                   // kTrk5
-    "TPC-TOF track-matching probability"                    // kTrk6
+    const Char_t *name[]={
+      "hGlobalTrackAzimuthe",                               // kTrk0
+      "hGlobalTrackEta",                                    // kTrk1
+      "hGlobalTPCTrackpT",                                  // kTrk2
+      "hGlobalTPCITSMatchedpT",                             // kTrk3
+      "hGlobalTPCTOFMatchedpT",                             // kTrk4
+      "hGlobalTPCITSMatchingProbability",                   // kTrk5
+      "hGlobalTPCTOFMatchingProbability",                   // kTrk6
+      "hGlobalTPCsideAposDCA",                              // kTrk7
+      "hGlobalTPCsideAnegDCA",                              // kTrk8
+      "hGlobalTPCsideCposDCA",                              // kTrk9
+      "hGlobalTPCsideCnegDCA"                               // kTrk10
   };
-  Add2ESDsList(new TH1F(name[0],name[0],100,-0.02,6.30),kTrk0);
-  Add2ESDsList(new TH1F(name[1],name[1],100,-2.00,2.00),kTrk1);
-  Add2ESDsList(new TH1F(name[2],name[2],50,  0.20,5.00),kTrk2);
-  Add2ESDsList(new TH1F(name[3],name[3],50,  0.20,5.00),kTrk3);
-  Add2ESDsList(new TH1F(name[4],name[4],50,  0.20,5.00),kTrk4);
-  Add2ESDsList(new TH1F(name[5],name[5],50,  0.20,5.00),kTrk5);
-  Add2ESDsList(new TH1F(name[6],name[6],50,  0.20,5.00),kTrk6);
+    const Char_t *title[]={
+      "Track azimuthal distribution (rad)",                   // kTrk0
+      "Track pseudo-rapidity distribution",                   // kTrk1
+      "TPC: track momentum distribution (GeV)",               // kTrk2
+      "TPC-ITS matched: track momentum distribution (GeV)",   // kTrk3
+      "TPC-TOF matched: track momentum distribution (GeV)",   // kTrk4
+      "TPC-ITS track-matching probability",                   // kTrk5
+      "TPC-TOF track-matching probability",                   // kTrk6
+      "TPC side A: DCA for the positive tracks (mm)",         // kTrk7
+      "TPC side A: DCA for the negative tracks (mm)",         // kTrk8
+      "TPC side C: DCA for the positive tracks (mm)",         // kTrk9
+      "TPC side C: DCA for the negative tracks (mm)"          // kTrk10
+    };
+  Add2ESDsList(new TH1F(name[0],title[0],100, 0.,TMath::TwoPi()),kTrk0, !expert, image);
+  Add2ESDsList(new TH1F(name[1],title[1],100,-2.00,2.00),kTrk1, !expert, image);
+  Add2ESDsList(new TH1F(name[2],title[2],50,  0.20,5.00),kTrk2, !expert, image);
+  Add2ESDsList(new TH1F(name[3],title[3],50,  0.20,5.00),kTrk3, !expert, image);
+  Add2ESDsList(new TH1F(name[4],title[4],50,  0.20,5.00),kTrk4, !expert, image);
+  Add2ESDsList(new TH1F(name[5],title[5],50,  0.20,5.00),kTrk5, !expert, image);
+  Add2ESDsList(new TH1F(name[6],title[6],50,  0.20,5.00),kTrk6, !expert, image);
+  Add2ESDsList(new TH1F(name[7],title[7],50, -25.0,25.0),kTrk7, !expert, image);
+  Add2ESDsList(new TH1F(name[8],title[8],50, -25.0,25.0),kTrk8, !expert, image);
+  Add2ESDsList(new TH1F(name[9],title[9],50, -25.0,25.0),kTrk9, !expert, image);
+  Add2ESDsList(new TH1F(name[10],title[10],50, -25.0,25.0),kTrk10, !expert, image);
   }
 
   {// V0 related QA
-  Char_t *name[]={
-    "K0s mass (GeV)",
-    "Lambda0 + Lambda0Bar mass (GeV)"
-  };
-  Add2ESDsList(new TH1F(name[0],name[0],50,  0.4477,0.5477),kV0s0);
-  Add2ESDsList(new TH1F(name[1],name[1],50,  1.0657,1.1657),kV0s1);
+    const Char_t *name[]={
+      "hGlobalPromptK0sMass",
+      "hGlobalOfflineK0sMass",
+      "hGlobalPromptLambda0Lambda0BarMass",
+      "hGlobalOfflineLambda0Lambda0BarMass"
+    };
+    const Char_t *title[]={
+      "On-the-fly K0s mass (GeV)",
+      "Offline K0s mass (GeV)",
+      "On-the-fly Lambda0 + Lambda0Bar mass (GeV)",
+      "Offline Lambda0 + Lambda0Bar mass (GeV)"
+    };
+    Add2ESDsList(new TH1F(name[0],title[0],50,  0.4477,0.5477),kK0on, !expert, image);
+    Add2ESDsList(new TH1F(name[1],title[1],50,  0.4477,0.5477),kK0off, !expert, image);
+    Add2ESDsList(new TH1F(name[2],title[2],50,  1.0657,1.1657),kL0on, !expert, image);
+    Add2ESDsList(new TH1F(name[3],title[3],50,  1.0657,1.1657),kL0off, !expert, image);
   }
 
   {// PID related QA
-  Char_t *name[]={
-    "ITS: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)",
-    "TPC: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)",
-    "TOF: tracking - measured (ps)"
+  const Char_t *name[]={
+    "hGlobalITSdEdx",
+    "hGlobalTPCdEdx",
+    "hGlobalTOFTrackingvsMeasured"
   };
-  Add2ESDsList(new TH1F(name[0],name[0],50,0.00,200.),kPid0);
-  Add2ESDsList(new TH1F(name[1],name[1],50,0.00,100.),kPid1);
-  Add2ESDsList(new TH1F(name[2],name[2],50,-3500.,3500.),kPid2);
+    const Char_t *title[]={
+      "ITS: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)",
+      "TPC: dEdx (ADC) for particles with momentum 0.4 - 0.5 (GeV)",
+      "TOF: tracking - measured (ps)"
+    };
+    Add2ESDsList(new TH1F(name[0],title[0],50,0.00,200.),kPid0, !expert, image);
+    Add2ESDsList(new TH1F(name[1],title[1],50,0.00,100.),kPid1, !expert, image);
+    Add2ESDsList(new TH1F(name[2],title[2],50,-3500.,3500.),kPid2, !expert, image);
   }
 
 }
@@ -177,6 +249,11 @@ void AliGlobalQADataMaker::MakeESDs(AliESDEvent * event) {
   // This function fills the ESD QA histograms
   // as a part of global QA
   //-----------------------------------------------------------
+  // Check id histograms already created for this Event Specie
+  if ( ! GetESDsData(kClr0) )
+    InitESDs() ;
+
+
   const AliESDEvent *esd=event;
 
   Int_t ntrk=esd->GetNumberOfTracks() ; 
@@ -192,7 +269,10 @@ void AliGlobalQADataMaker::MakeESDs(AliESDEvent * event) {
     if (track->IsOn(AliESDtrack::kTPCrefit)) {
       Int_t n =track->GetTPCNcls();
       Int_t nf=track->GetTPCNclsF();      // number of crossed TPC pad rows
-      if (nf>0) GetESDsData(kClr1)->Fill(Float_t(n)/nf);
+      if (nf>0) {
+        Double_t val = n*1.0/nf; 
+        GetESDsData(kClr1)->Fill(val); 
+      }
     }
 
     if (track->IsOn(AliESDtrack::kTRDrefit)) {
@@ -215,10 +295,33 @@ void AliGlobalQADataMaker::MakeESDs(AliESDEvent * event) {
         if (TMath::Abs(y)<0.9) {
           GetESDsData(kTrk2)->Fill(p);
           if (track->IsOn(AliESDtrack::kITSrefit)) GetESDsData(kTrk3)->Fill(p);
-          if (track->IsOn(AliESDtrack::kTOFout)) GetESDsData(kTrk4)->Fill(p);
+         //if (track->IsOn(AliESDtrack::kTOFout)) GetESDsData(kTrk4)->Fill(p);
+          if (track->GetTOFsignal()>0) GetESDsData(kTrk4)->Fill(p);
        }
       }
     }
+    const AliExternalTrackParam *tpcTrack=track->GetTPCInnerParam();
+    const AliExternalTrackParam *innTrack=track->GetInnerParam();
+    if (tpcTrack)
+    if (innTrack) {
+       const AliESDVertex *vtx=esd->GetPrimaryVertex();
+       Double_t xv=vtx->GetXv();
+       Double_t yv=vtx->GetYv();
+       Double_t zv=vtx->GetZv();
+       Float_t dz[2];
+       tpcTrack->GetDZ(xv,yv,zv,esd->GetMagneticField(),dz);
+       dz[0]*=10.; // in mm
+       if (innTrack->GetZ()  > 0)
+       if (innTrack->GetTgl()> 0) { // TPC side A
+         if (tpcTrack->GetSign() > 0) GetESDsData(kTrk7)->Fill(dz[0]);
+          else                         GetESDsData(kTrk8)->Fill(dz[0]);
+       }
+       if (innTrack->GetZ()  < 0)
+       if (innTrack->GetTgl()< 0) { // TPC side C
+         if (tpcTrack->GetSign() > 0) GetESDsData(kTrk9)->Fill(dz[0]);
+          else                         GetESDsData(kTrk10)->Fill(dz[0]);
+       }
+    }
 
     // PID related QA
     if ((p>0.4) && (p<0.5)) {
@@ -255,15 +358,24 @@ void AliGlobalQADataMaker::MakeESDs(AliESDEvent * event) {
 
     v0.ChangeMassHypothesis(kK0Short);
     mass=v0.GetEffMass();
-    GetESDsData(kV0s0)->Fill(mass);
+    if (v0.GetOnFlyStatus())
+       GetESDsData(kK0on)->Fill(mass);
+    else
+       GetESDsData(kK0off)->Fill(mass);
 
     v0.ChangeMassHypothesis(kLambda0);
     mass=v0.GetEffMass();
-    GetESDsData(kV0s1)->Fill(mass);
+    if (v0.GetOnFlyStatus())
+       GetESDsData(kL0on)->Fill(mass);
+    else
+       GetESDsData(kL0off)->Fill(mass);
 
     v0.ChangeMassHypothesis(kLambda0Bar);
     mass=v0.GetEffMass();
-    GetESDsData(kV0s1)->Fill(mass);
+    if (v0.GetOnFlyStatus())
+       GetESDsData(kL0on)->Fill(mass);
+    else
+       GetESDsData(kL0off)->Fill(mass);
   }
 
 }