Add centrality dependence in pA for muon tracking QA task and T0 trigger to normalize...
authorpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Jan 2013 11:53:06 +0000 (11:53 +0000)
committerpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 9 Jan 2013 11:53:06 +0000 (11:53 +0000)
PWGPP/MUON/lite/AliAnalysisTaskMuonQA.cxx
PWGPP/MUON/lite/PlotMuonQA.C
PWGPP/MUON/lite/trigEffQA.C

index c3728fc..6ecf76b 100644 (file)
@@ -409,19 +409,37 @@ void AliAnalysisTaskMuonQA::UserExec(Option_t *)
   if (!fSelectPhysics) triggerWord = BuildTriggerWord(FiredTriggerClasses);
   Bool_t isTriggerSelected = ((triggerWord & fTriggerMask) != 0);
   
-
   // get the V0 multiplicity (except for p-p)
   AliESDVZERO* v0Data = fESD->GetVZEROData();
   Float_t v0Mult = 0.;
-  if (v0Data && strcmp(fESD->GetBeamType(),"p-p"))
-    for (Int_t i = 0 ; i < 64 ; i++) v0Mult += v0Data->GetMultiplicity(i);
+  const Int_t nV0MultRange = 4;
+  const Int_t nCollType = 2;
+  //define rough V0 mult. range (~ 80%, 60%, 10%, 0%)
+  Int_t v0MultRange[nCollType][nV0MultRange]= {{239,1165,12191,20633},{25,60,200,800}};
+  Int_t iCollType = 0;
+
+  if (v0Data) {
+    if (!strcmp(fESD->GetBeamType(),"A-A")){
+      iCollType = 0;
+      for (Int_t i = 0 ; i < 64 ; i++) v0Mult += v0Data->GetMultiplicity(i);
+    } 
+    else if (!strcmp(fESD->GetBeamType(),"p-A")){
+      iCollType = 1;
+      for (Int_t i = 0 ; i < 32 ; i++) v0Mult += v0Data->GetMultiplicityV0A(i);
+    }
+    else if (!strcmp(fESD->GetBeamType(),"A-p")){
+      iCollType = 1;
+      for (Int_t i = 0 ; i < 32 ; i++) v0Mult += v0Data->GetMultiplicityV0C(i);
+    }
+  }
+
   TList listV0MultKey;
   listV0MultKey.SetOwner();
   listV0MultKey.AddLast(new TObjString("v0mult:any"));
-  //if (v0Mult > 239. && v0Mult < 559.) listV0MultKey.AddLast(new TObjString("v0mult:low"));
-  if (v0Mult >= 239. && v0Mult < 1165.) listV0MultKey.AddLast(new TObjString("v0mult:low"));
-  else if (v0Mult >= 1165. && v0Mult < 12191.) listV0MultKey.AddLast(new TObjString("v0mult:int"));
-  else if (v0Mult >= 12191. && v0Mult < 20633.) listV0MultKey.AddLast(new TObjString("v0mult:high"));
+  if (v0Mult >= v0MultRange[iCollType][0] && v0Mult < v0MultRange[iCollType][1]) listV0MultKey.AddLast(new TObjString("v0mult:low"));
+  else if (v0Mult >= v0MultRange[iCollType][1] && v0Mult < v0MultRange[iCollType][2]) listV0MultKey.AddLast(new TObjString("v0mult:int"));
+  else if (v0Mult >= v0MultRange[iCollType][2] && v0Mult < v0MultRange[iCollType][3]) listV0MultKey.AddLast(new TObjString("v0mult:high"));
+  
   TIter nextV0MultKey(&listV0MultKey);
   
   // first loop over tracks to check for trigger readout problem
index fec5f24..56cdb9b 100644 (file)
@@ -774,8 +774,6 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
   // Loop over runs
   for ( Int_t irun=0; irun<runs->GetEntriesFast(); irun++ ) {
     
-    //cout<<irun<<endl;
-
     TString run = ((TObjString*)runs->UncheckedAt(irun))->GetString();
     TString run2 = ((TObjString*)runs2->UncheckedAt(irun))->GetString();
     // get the file (or list of files) to be analyzed
@@ -783,6 +781,8 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
     TGridResult *res = 0;
     TObjString *objs = 0;      
     
+    //cout<<irun<<" "<<run<<endl;
+
     if(isAlienFile){
       command = Form("find %s/ %s/%s", alienBaseDir.Data(), run.Data(), QAFileName);
       res = gGrid->Command(command);
@@ -821,7 +821,7 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
     TMap *map = 0;
     
     //some checks
-    Int_t iLoop=0, iLoopMax=200;
+    Int_t iLoop=0, iLoopMax=1000;
     while (kTRUE){
       
       // get the current file url
@@ -1128,7 +1128,7 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
   hClusterChargeMeanInCh[0]->GetXaxis()->SetRange(1,ibin-1);
   hClusterChargeMeanInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
   //hClusterChargeInCh[0]->LabelsOption("u"); 
-  hClusterChargeMeanInCh[0]->SetLabelSize(0.02);
+  hClusterChargeMeanInCh[0]->SetLabelSize(0.04);
   hClusterChargeMeanInCh[0]->SetTitle("Cluster charge mean (fC) per track in chamber i");
   hClusterChargeMeanInCh[0]->SetMaximum(150);
   hClusterChargeMeanInCh[0]->SetMinimum(30);
@@ -1146,7 +1146,7 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
   hClusterChargeSigmaInCh[0]->GetXaxis()->SetRange(1,ibin-1);
   hClusterChargeSigmaInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
   //hClusterChargeInCh[0]->LabelsOption("u");                                                                               
-  hClusterChargeSigmaInCh[0]->SetLabelSize(0.02);
+  hClusterChargeSigmaInCh[0]->SetLabelSize(0.04);
   hClusterChargeSigmaInCh[0]->SetTitle("Cluster charge sigma per track in chamber i");
   hClusterChargeSigmaInCh[0]->SetMaximum(250);
   hClusterChargeSigmaInCh[0]->SetMinimum(50);
@@ -1175,7 +1175,7 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
   hClusterSizeMeanInCh[0]->GetXaxis()->SetRange(1,ibin-1);
   hClusterSizeMeanInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
 
-  hClusterSizeMeanInCh[0]->SetLabelSize(0.02);
+  hClusterSizeMeanInCh[0]->SetLabelSize(0.04);
   hClusterSizeMeanInCh[0]->SetTitle("Cluster size mean (npads) per track in chamber i");
   hClusterSizeMeanInCh[0]->SetMaximum(18);
   hClusterSizeMeanInCh[0]->SetMinimum(0);
@@ -1193,7 +1193,7 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
   hClusterSizeSigmaInCh[0]->GetXaxis()->SetRange(1,ibin-1);
   hClusterSizeSigmaInCh[0]->GetXaxis()->SetNdivisions(1,kFALSE);
 
-  hClusterSizeSigmaInCh[0]->SetLabelSize(0.02);
+  hClusterSizeSigmaInCh[0]->SetLabelSize(0.04);
   hClusterSizeSigmaInCh[0]->SetTitle("Cluster size sigma (npads) per track in chamber i");
   hClusterSizeSigmaInCh[0]->SetMaximum(7);
   hClusterSizeSigmaInCh[0]->SetMinimum(0);
@@ -1347,7 +1347,7 @@ void PlotMuonQA(const char* baseDir, const char* runList = 0x0, const char * tri
       hRelMuonTrigger[j]->SetStats(kFALSE);
       hRelMuonTrigger[j]->GetXaxis()->SetNdivisions(1,kFALSE);
       hRelMuonTrigger[j]->LabelsOption("a");                 
-      hRelMuonTrigger[j]->SetLabelSize(0.04);
+      hRelMuonTrigger[j]->SetLabelSize(0.02);
       //hRelMuonTrigger[j]->GetXaxis()->SetLabelSize(0.04);
       hRelMuonTrigger[j]->SetLineWidth(2);
       hRelMuonTrigger[j]->SetTitle("");
@@ -1522,7 +1522,7 @@ TCanvas *ProcessCanvasRelativeTriggerContent(TObjArray *triggersB, TH1 **histo,
     if(i==0){
       ratio[i]->SetMaximum(1.5);
       ratio[i]->SetMinimum(0.001);
-      ratio[i]->SetLabelSize(0.02);
+      ratio[i]->SetLabelSize(0.04);
       ratio[i]->GetYaxis()->SetTitle("Relative trigger content"); 
       ratio[i]->Draw("E");
     }
@@ -1938,7 +1938,7 @@ TCanvas *ProcessCanvasTrackMultB(TObjArray *triggersB, TH1 **hB, TH1 **hTrackerB
     
   hName = Form("Sum of trigger tracks (matched+trigger-only) / # events in %s %s",hNameBase.Data(),legendHeader.Data());
   hSumTriggerOverB->SetTitle(hName);
-  hSumTriggerOverB->SetLabelSize(0.02);
+  hSumTriggerOverB->SetLabelSize(0.04);
   hSumTriggerOverB->SetLineWidth(2);
   hSumTriggerOverB->SetLineColor(kBlue);
   hName = Form("hSumTrackerOver%s",hNameBase.Data());
@@ -1948,7 +1948,7 @@ TCanvas *ProcessCanvasTrackMultB(TObjArray *triggersB, TH1 **hB, TH1 **hTrackerB
   hName = Form("Sum of tracker tracks (matched+tracker-only) / # events in %s %s",hNameBase.Data(),legendHeader.Data());
   hSumTrackerOverB->SetTitle(hName);
   //hSumTrackerOverCINT1B->LabelsOption("u");
-  hSumTrackerOverB->SetLabelSize(0.02);
+  hSumTrackerOverB->SetLabelSize(0.04);
   hSumTrackerOverB->SetLineWidth(2);
   hSumTrackerOverB->SetLineColor(kBlue);
                
index 3979760..9d30b6a 100644 (file)
 const Int_t kNch = 4;
 const Double_t kZero = 1.e-7; // Avoid problems when comparing to 0.
 
+const Int_t kNCollType = 4; 
+TString kSCollType[kNCollType] = {"-B-","-S-","-SC-","-SA-"}; 
+
+
 //_____________________________________________________________________________
 void SetMyStyle()
 {
@@ -541,10 +545,38 @@ void MaskTrending ( TObjArray runNumArray, TString defaultStorage, TList& outCan
     outCanList.Add(can);
   }
 }
+//_____________________________________________________________________________
+TObjArray* BuildListOfT0Trigger(TObjArray* selectedTriggerArray, TString sT0Name = "C0TVX") {
 
+  if ( !selectedTriggerArray ) return 0;
+  
+  TObjArray* selectedList = new TObjArray();
+  selectedList->SetOwner();
+  
+  TString sT0TriggerName = "";
+  TString currTrigName = "";
+  Bool_t isCollType[kNCollType];
+
+  for ( Int_t iCol = 0; iCol < kNCollType; iCol++ ) isCollType[iCol] = kFALSE;
+
+  for (Int_t iTrig = 0; iTrig < selectedTriggerArray->GetEntries(); iTrig++){
+    currTrigName = ((TObjString*)selectedTriggerArray->At(iTrig))->GetName();
+    //search the collision type
+    for ( Int_t iCol = 0; iCol < kNCollType; iCol++ ) {
+      if ( currTrigName.Contains( kSCollType[iCol]  ) ) isCollType[iCol] = kTRUE;
+    }
+  }
+  for ( Int_t iCol = 0; iCol < kNCollType; iCol++ ) {
+    if ( !isCollType[iCol] ) continue;
+    sT0TriggerName = Form("%s%sNOPF-ALLNOTRD",sT0Name.Data(),kSCollType[iCol].Data());
+    selectedList->AddLast(new TObjString(sT0TriggerName.Data()));
+  }
+
+  return selectedList;
+}
 
 //_____________________________________________________________________________
-TObjArray* BuildListOfTrigger(TString triggerListName, TString rejectPattern="OTHER TRUE PHI ANY EMC -ACE- -ABCE- WU MUP SPI") {
+TObjArray* BuildListOfTrigger(TString triggerListName, TString rejectPattern="OTHER TRUE PHI ANY EMC -ACE- -ABCE- WU MUP SPI SHM") {
 
   TObjArray* selectedList = new TObjArray();
   selectedList->SetOwner();
@@ -572,7 +604,27 @@ TObjArray* BuildListOfTrigger(TString triggerListName, TString rejectPattern="OT
 }
 
 //_____________________________________________________________________________
-void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString defaultStorage, TList& outCanList, TList& outList)
+TString FindT0TriggerName(TObjArray *T0TrigArray,TString sTrig, TString sT0Name = "C0TVX") {
+
+  TString name = "";
+  if ( !T0TrigArray ) return name;
+  TString currTrigName = "";
+
+  //search the collision type
+  for ( Int_t iCol = 0; iCol < kNCollType; iCol++ ) {
+    if ( sTrig.Contains( kSCollType[iCol] ) ) {
+      for ( Int_t iTrig = 0; iTrig < T0TrigArray->GetEntries(); iTrig++ ){
+       currTrigName = ((TObjString*) T0TrigArray->At(iTrig))->GetName();
+       if ( currTrigName.Contains( kSCollType[iCol] )  ) return currTrigName;       
+      }
+    }
+    
+  }
+  return name;
+}
+  
+//_____________________________________________________________________________
+void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString defaultStorage, TList& outCanList, TList& outList )
 {
 
   if ( defaultStorage.Contains("alien://") || defaultStorage.Contains("raw://") ) {
@@ -596,10 +648,13 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
   }
   printf("Nr of triggers selected %i\n",selectedTriggerArray->GetEntries());
 
+  TObjArray* selectedT0TriggerArray = BuildListOfT0Trigger(selectedTriggerArray);
+  printf("Nr of T0 triggers selected %i\n",selectedT0TriggerArray->GetEntries());
   
   const Int_t nScaler = 3;
   TString sScaler[nScaler] = {"L0B","L2A","L0BRATE"};
-  Float_t maxScaler[nScaler] = {1e7,1e6,1e6};
+  enum eScaler {kL0B = 0, kL2A=1, kL0BRATE=2};
+  Float_t maxScaler[nScaler] = {1e8,1e7,1e6};
   TObjArray hFromQA;
   TObjArray hFromScalers; 
   TObjArray hOutput;
@@ -609,7 +664,8 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
   //
   //Create histos for Scalers and QA 
   //
-  //loop on trigger list
+
+  //loop on recorded trigger list
   for ( Int_t iTrig = 0; iTrig < selectedTriggerArray->GetEntries(); iTrig++ ) {
     //loop on scaler list
     for ( Int_t iScaler = 0; iScaler < nScaler; iScaler++ ) {
@@ -618,6 +674,8 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
       sHistName += sScaler[iScaler];
       sTitleName = sHistName;
 
+      //      printf("Trigger: %s\n",((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
+          
       sHistNameFull = "Scalers_";
       sHistNameFull += sHistName;
       TH1F* hCounterScalers = new TH1F(sHistNameFull,sTitleName,nRuns,1,(Double_t)nRuns);
@@ -637,6 +695,25 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
       
     }
   }
+  //loop on T0 trigger list (only for L0B)
+  for ( Int_t iTrig = 0; iTrig < selectedT0TriggerArray->GetEntries(); iTrig++ ) {
+
+    sHistName = ((TObjString*) selectedT0TriggerArray->At(iTrig))->GetName();
+    sHistName += "_";
+    sHistName += sScaler[0];
+    sTitleName = sHistName;
+
+    printf("Trigger: %s\n",((TObjString*) selectedT0TriggerArray->At(iTrig))->GetName());
+    
+    sHistNameFull = "Scalers_";
+    sHistNameFull += sHistName;
+    TH1F* hCounterScalers = new TH1F(sHistNameFull,sTitleName,nRuns,1,(Double_t)nRuns);
+    hCounterScalers->SetDirectory(0);
+    hCounterScalers->SetMinimum(1);
+    hCounterScalers->SetMaximum(maxScaler[0]);
+    hFromScalers.AddLast(hCounterScalers);
+    hOutput.AddLast(hCounterScalers);
+  }
   //
   //Fill histos for Scalers and QA
   //
@@ -659,12 +736,12 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
         sHistNameFull = Form("Scalers_%s_%s",selectedTriggerArray->At(iTrig)->GetName(),sScaler[iScaler].Data());
         TH1* hist = (TH1*) hFromScalers.FindObject(sHistNameFull);
         if ( !hist ) continue;
-        Double_t *tab = (Double_t*) graph->GetY();
-        if ( tab ) hist->SetBinContent(iRun+1,tab[0]);
-        else hist->SetBinContent(iRun+1,0);
-        hist->GetXaxis()->SetBinLabel(iRun+1,sRunNr.Data());
-        delete graph;
-        
+       Double_t *tab = (Double_t*) graph->GetY();
+       if ( tab ) hist->SetBinContent(iRun+1,tab[0]);
+       else hist->SetBinContent(iRun+1,0);
+       hist->GetXaxis()->SetBinLabel(iRun+1,sRunNr.Data());
+       delete graph;
+
         //from QA
         if ( !(sScaler[iScaler].Contains("L2A")) ) continue;
         TH1* histCounters = static_cast<TH1*>(ccol->Get("run",Form("run:%s/trigger:%s",sRunNr.Data(),selectedTriggerArray->At(iTrig)->GetName())));
@@ -680,6 +757,24 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
         
       }//end loop on scaler list
     }//end loop on trigger list
+
+    //loop on T0 trigger list
+    for ( Int_t iTrig = 0; iTrig < selectedT0TriggerArray->GetEntries(); iTrig++ ) {
+      
+      //from Scalers
+      TGraph* graph = triggerScaler.PlotTrigger(selectedT0TriggerArray->At(iTrig)->GetName(),sScaler[kL0B].Data());
+        
+      sHistNameFull = Form("Scalers_%s_%s",selectedT0TriggerArray->At(iTrig)->GetName(),sScaler[kL0B].Data());
+      TH1* hist = (TH1*) hFromScalers.FindObject(sHistNameFull);
+      if ( !hist ) continue;
+      Double_t *tab = (Double_t*) graph->GetY();
+      if ( tab ) hist->SetBinContent(iRun+1,tab[0]);
+      else hist->SetBinContent(iRun+1,0);
+      hist->GetXaxis()->SetBinLabel(iRun+1,sRunNr.Data());
+      delete graph;
+
+    }//end loop on T0 trigger list
+    
   }//end loop on run list
   
   
@@ -708,23 +803,48 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
 
   
   //Loop on histos from scalers and QA and create resulting histos from scalers
-  const Int_t nHisto = 2;
-  TString sHisto[nHisto] = {"L2AoverL0B","L2AQAoverSCALERS"};
+  const Int_t nHisto = 3;
+  TString sHisto[nHisto] = {"L0BoverL0BC0TVX","L2AoverL0B","L2AQAoverSCALERS"};
+  TString sTitleHisto[nHisto] = {"L0B trigger / L0BC0TVX","L2A / L0B","L2A from QA / L2A from SCALERS"};
+  //  TString sHisto[nHisto] = {"L2AoverL0B","L2AQAoverSCALERS"};
   
   //loop on trigger list
   for ( Int_t iTrig = 0; iTrig < selectedTriggerArray->GetEntries(); iTrig++ ) {
-    //DEADTIME
+
+    //C0TVX
+    TString sTrig = ( (TObjString*) selectedTriggerArray->At(iTrig) )->GetName();
+    TString sT0Trig = FindT0TriggerName(selectedT0TriggerArray,sTrig);
+
+    sHistNameFull = Form("Scalers_%s_L0B",sT0Trig.Data());
+
+    TH1* histo0 = static_cast<TH1*> ( hFromScalers.FindObject(sHistNameFull) );
+    if (!histo0) continue;
+
     sHistNameFull = Form("Scalers_%s_L0B",((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
     TH1* histo1 = static_cast<TH1*> ( hFromScalers.FindObject(sHistNameFull) );
     if (!histo1) continue;
-    
+
+    sHistNameFull = Form("%s_%s",sHisto[0].Data(),((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
+    TH1* histo10 = (TH1*) histo1->Clone(sHistNameFull);
+    histo10->SetTitle(sTitleHisto[0].Data());
+    histo10->Sumw2();
+    histo10->Divide(histo0);
+    histo10->SetMaximum(10);
+    histo10->SetMinimum(1e-5);
+    //outList.Add(histo10);
+    hOutput.AddLast(histo10);
+    //outList.Add(histo0);
+    //outList.Add(histo1);
+
+
+    //DEADTIME    
     sHistNameFull = Form("Scalers_%s_L2A",((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
     TH1* histo2 = static_cast<TH1*> ( hFromScalers.FindObject(sHistNameFull) );
     if (!histo2) continue;
     
-    sHistNameFull = Form("%s_%s",sHisto[0].Data(),((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
+    sHistNameFull = Form("%s_%s",sHisto[1].Data(),((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
     TH1* histo3 = (TH1*) histo2->Clone(sHistNameFull);
-    histo3->SetTitle(sHisto[0]);
+    histo3->SetTitle(sTitleHisto[1]);
     histo3->Sumw2();
     histo3->Divide(histo1);
     histo3->SetMaximum(1.2);
@@ -737,9 +857,9 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
     TH1* histo4 = static_cast<TH1*> ( hFromQA.FindObject(sHistNameFull) );
     if (!histo4) continue;
     
-    sHistNameFull = Form("%s_%s",sHisto[1].Data(),((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
+    sHistNameFull = Form("%s_%s",sHisto[2].Data(),((TObjString*) selectedTriggerArray->At(iTrig))->GetName());
     TH1* histo5 = (TH1*) histo4->Clone(sHistNameFull);
-    histo5->SetTitle(sHisto[1]);
+    histo5->SetTitle(sTitleHisto[2]);
     histo5->Sumw2();
     histo5->Divide(histo2);
     histo5->SetMaximum(1.2);
@@ -785,6 +905,7 @@ void ScalerTrending ( TObjArray runNumArray, TString mergedFileName, TString def
   }
   
   delete selectedTriggerArray;
+  delete selectedT0TriggerArray;
   
   file->Close();
 }