]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDCalibTask.cxx
Adding flexibility to submission macros
[u/mrichter/AliRoot.git] / TRD / AliTRDCalibTask.cxx
index 79660af9af354b46cadc1d9cbed8a1459cdea2d0..7215e996659650ad7d5bf28a1e9b9fec69e56cdd 100644 (file)
@@ -49,9 +49,11 @@ using namespace std;
 #include "AliAnalysisTask.h"
 #include "AliAnalysisManager.h"
 
+#include "AliExternalTrackParam.h"
 #include "AliESDVertex.h"
 #include "AliESDEvent.h"
 #include "AliESDfriend.h"
+#include "AliCentrality.h"
 #include "AliESDInputHandler.h"
 #include "AliESDtrack.h"
 #include "AliESDfriendTrack.h"
@@ -89,10 +91,12 @@ ClassImp(AliTRDCalibTask)
       fListHist(0),
       fTRDCalibraFillHisto(0),
       fNEvents(0),
+      fNEventsInput(0),
       fNbTRDTrack(0),
       fNbTRDTrackOffline(0),
       fNbTRDTrackStandalone(0),
       fNbTPCTRDtrack(0),
+      fNbGoodTracks(0),
       fNbTimeBin(0),
       fNbTimeBinOffline(0),
       fNbTimeBinStandalone(0),
@@ -119,6 +123,8 @@ ClassImp(AliTRDCalibTask)
       fVtxSPD(kFALSE),
       fMinNbContributors(0),
       fRangePrimaryVertexZ(9999999.0),
+      fMinNbTracks(9),
+      fMaxNbTracks(500),
       fLow(0),
       fHigh(30),
       fFillZero(kFALSE),
@@ -128,10 +134,13 @@ ClassImp(AliTRDCalibTask)
       fNbMaxCluster(2),
       fOfflineTracks(kFALSE),
       fStandaloneTracks(kFALSE),
+      fFirstRunGain(-1),
       fVersionGainUsed(-1),
       fSubVersionGainUsed(-1),
+      fFirstRunGainLocal(-1),
       fVersionGainLocalUsed(-1),
       fSubVersionGainLocalUsed(-1),
+      fFirstRunVdrift(-1),
       fVersionVdriftUsed(-1), 
       fSubVersionVdriftUsed(-1),
       fCalDetGain(0x0),
@@ -169,10 +178,12 @@ AliTRDCalibTask::~AliTRDCalibTask()
 
   // Pointeur
   if(fNEvents) delete fNEvents;
+  if(fNEventsInput) delete fNEventsInput;
   if(fNbTRDTrack) delete fNbTRDTrack;
   if(fNbTRDTrackOffline) delete fNbTRDTrackOffline;
   if(fNbTRDTrackStandalone) delete fNbTRDTrackStandalone;
   if(fNbTPCTRDtrack) delete fNbTPCTRDtrack;
+  if(fNbGoodTracks) delete fNbGoodTracks;
   if(fNbTimeBin) delete fNbTimeBin;
   if(fNbTimeBinOffline) delete fNbTimeBinOffline;
   if(fNbTimeBinStandalone) delete fNbTimeBinStandalone;
@@ -199,40 +210,6 @@ AliTRDCalibTask::~AliTRDCalibTask()
   
 }
 
-/*
-//________________________________________________________________________
-void AliTRDCalibTask::ConnectInputData(Option_t *) 
-{
-  // Connect ESD or AOD here
-  // Called once per event
-  
-  cout << "AliTRDCalibTask::ConnectInputData() IN" << endl;
-
-
-  //  TTree* tree = dynamic_cast<TTree*> (GetInputData(0)); //pointer wird "umgecastet" auf anderen Variablentyp
-  //  if (!tree) {
-    //Printf("ERROR: Could not read chain from input slot 0");
-  //  } else {
-    
-  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-  
-  if (!esdH) {
-    //Printf("ERROR: Could not get ESDInputHandler");
-  } else {
-    fESD = esdH->GetEvent();
-    //    esdH->SetActiveBranches("ESDfriend*");
-    if ((esdH->GetTree())->GetBranch("ESDfriend.")) fESDfriend = esdH->GetESDfriend();
-    //else printf("No friend ESD\n");
-    //Printf("*** CONNECTED NEW EVENT ****");
-  }
-    
-
-    //  }
-  //cout << "AliTRDCalibTask::ConnectInputData() OUT" << endl;
-
-}
-*/
-
 //________________________________________________________________________
 void AliTRDCalibTask::UserCreateOutputObjects() 
 {
@@ -293,6 +270,7 @@ void AliTRDCalibTask::UserCreateOutputObjects()
   
   // output list
   fListHist = new TList();
+  fListHist->SetOwner();
   if(fHisto2d) {  
     fListHist->Add(fTRDCalibraFillHisto->GetCH2d());
     fListHist->Add(fTRDCalibraFillHisto->GetPH2d()); 
@@ -302,6 +280,8 @@ void AliTRDCalibTask::UserCreateOutputObjects()
   if(fVector2d) fListHist->Add((TObject *) fTRDCalibraFillHisto->GetCalibraVector()); //calibra vector  
   fNEvents = new TH1I("NEvents","NEvents", 2, 0, 2);
   fListHist->Add(fNEvents);
+  fNEventsInput = new TH1I("NEventsInput","NEventsInput", 2, 0, 2);
+  fListHist->Add(fNEventsInput);
   
   // absolute gain calibration even without AliESDfriend
   Int_t nBinsPt = 25;
@@ -358,12 +338,19 @@ void AliTRDCalibTask::UserCreateOutputObjects()
     fCH2dSum->SetZTitle("counts");
     fCH2dSum->SetStats(0);
     fCH2dSum->Sumw2();
+    //
+    fNbGoodTracks = new TH2F("NbGoodTracks","NbGoodTracks",500,0.0,2500.0,200,0.0,100.0);
+    fNbGoodTracks->SetXTitle("Nb of good tracks");
+    fNbGoodTracks->SetYTitle("Centrality");
+    fNbGoodTracks->SetStats(0);
+
     
     // Add them
     fListHist->Add(fPH2dSM);
     fListHist->Add(fCH2dSM);
     fListHist->Add(fPH2dSum);
     fListHist->Add(fCH2dSum);
+    fListHist->Add(fNbGoodTracks);
   }
 
   /////////////////////////////////////////
@@ -421,6 +408,8 @@ void AliTRDCalibTask::UserCreateOutputObjects()
   delete [] binLimLogPt;
   delete [] binLimPt;
 
+  PostData(1,fListHist);
+
   //cout << "AliTRDCalibTask::UserCreateOutputObjects() OUT" << endl;
 
 }
@@ -434,21 +423,20 @@ void AliTRDCalibTask::UserExec(Option_t *)
   //cout << "AliTRDCalibTask::Exec() IN" << endl;
   
   // Init Versions and subversions used
-  if((fVersionGainUsed==-1) || (fSubVersionGainUsed==-1) || (fVersionGainLocalUsed==-1) || (fSubVersionGainLocalUsed==-1) || (fVersionVdriftUsed==-1) || (fSubVersionVdriftUsed==-1)) {
+  if((fFirstRunGain==-1) || (fVersionGainUsed==-1) || (fSubVersionGainUsed==-1) || (fFirstRunGainLocal==-1) || (fVersionGainLocalUsed==-1) || (fSubVersionGainLocalUsed==-1) || (fFirstRunVdrift==-1) || (fVersionVdriftUsed==-1) || (fSubVersionVdriftUsed==-1)) {
     if(!SetVersionSubversion()) {
-      fVersionGainUsed=0;
-      fSubVersionGainUsed=0;
-      fVersionGainLocalUsed=0;
-      fSubVersionGainLocalUsed=0;
-      fVersionVdriftUsed=0;
-      fSubVersionVdriftUsed=0;
+      PostData(1, fListHist);
+      return;
     }
   }
   if(fCounter==0) {
+    fTRDCalibraFillHisto->SetFirstRunGain(fFirstRunGain); // Gain Used
     fTRDCalibraFillHisto->SetVersionGainUsed(fVersionGainUsed); // Gain Used
     fTRDCalibraFillHisto->SetSubVersionGainUsed(fSubVersionGainUsed); // Gain Used
+    fTRDCalibraFillHisto->SetFirstRunGainLocal(fFirstRunGainLocal); // Gain Used
     fTRDCalibraFillHisto->SetVersionGainLocalUsed(fVersionGainLocalUsed); // Gain Used
     fTRDCalibraFillHisto->SetSubVersionGainLocalUsed(fSubVersionGainLocalUsed); // Gain Used
+    fTRDCalibraFillHisto->SetFirstRunVdrift(fFirstRunVdrift); // Vdrift Used
     fTRDCalibraFillHisto->SetVersionVdriftUsed(fVersionVdriftUsed); // Vdrift Used
     fTRDCalibraFillHisto->SetSubVersionVdriftUsed(fSubVersionVdriftUsed); // Vdrift Used
     fTRDCalibraFillHisto->InitCalDet();
@@ -462,13 +450,21 @@ void AliTRDCalibTask::UserExec(Option_t *)
     PostData(1, fListHist);
     return;
   }
+
+  const char* type = fESD->GetBeamType();
+  
   
   //printf("Counter %d\n",fCounter);
   
   fCounter++;
+  fNEventsInput->Fill(1);
+
   //cout << "maxEvent = " << fMaxEvent << endl;
   //if(fCounter%100==0) cout << "fCounter = " << fCounter << endl;
-  if((fMaxEvent != 0) && (fMaxEvent < fCounter)) return;
+  if((fMaxEvent != 0) && (fMaxEvent < fCounter)) {
+    PostData(1, fListHist);
+    return;
+  }
   //if(fCounter%100==0) cout << "fCounter1 = " << fCounter << endl;
   //cout << "event = " << fCounter << endl;
   
@@ -478,32 +474,40 @@ void AliTRDCalibTask::UserExec(Option_t *)
   // Check trigger
   ///////////////////
   Bool_t pass = kTRUE;
-  Int_t numberOfTriggerSelected = fSelectedTrigger->GetEntriesFast();
-  //printf("numberofTriggerSelected %d\n",numberOfTriggerSelected);
-  if(fRejected) {
-    pass = kTRUE;
-    for(Int_t k = 0; k < numberOfTriggerSelected; k++){
-      const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
-      const TString tString=obString->GetString();
-      if(fESD->IsTriggerClassFired((const char*)tString)) {
-       pass = kFALSE;
+
+  if (strstr(type,"p-p")) {
+   
+    //printf("Will check the triggers\n");
+
+    Int_t numberOfTriggerSelected = fSelectedTrigger->GetEntriesFast();
+    //printf("numberofTriggerSelected %d\n",numberOfTriggerSelected);
+    if(fRejected) {
+      pass = kTRUE;
+      for(Int_t k = 0; k < numberOfTriggerSelected; k++){
+       const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
+       const TString tString=obString->GetString();
+       if(fESD->IsTriggerClassFired((const char*)tString)) {
+         pass = kFALSE;
+       }
       }
     }
-  }
-  else {
-    pass = kFALSE;
-    for(Int_t k = 0; k < numberOfTriggerSelected; k++){
-      const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
-      const TString tString=obString->GetString();
-      if(fESD->IsTriggerClassFired((const char*)tString)) {
-       pass = kTRUE;
+    else {
+      pass = kFALSE;
+      for(Int_t k = 0; k < numberOfTriggerSelected; k++){
+       const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k);
+       const TString tString=obString->GetString();
+       if(fESD->IsTriggerClassFired((const char*)tString)) {
+         pass = kTRUE;
+       }
       }
     }
+    if(!pass) {
+      PostData(1, fListHist);
+      return;
+    }   
+
   }
-  if(!pass) {
-    PostData(1, fListHist);
-    return;
-  }   
+    
   //printf("Class Fired %s\n",(const char*)fESD->GetFiredTriggerClasses());
   //printf("Trigger passed\n");
   
@@ -534,6 +538,31 @@ void AliTRDCalibTask::UserExec(Option_t *)
   
   //printf("Primary vertex passed\n");
   
+  //////////////////////////////////////
+  // Requirement on number of good tracks
+  //////////////////////////////////////
+  Int_t nGoodParticles = 0;
+  Double_t nbTracks = fESD->GetNumberOfTracks();
+  for(Int_t itrack = 0; itrack < nbTracks; itrack++) {
+    if(ParticleGood(itrack)) nGoodParticles++;  
+  }
+  if(fDebug > 0)  {
+    // Centrality
+    AliCentrality *esdCentrality = fESD->GetCentrality();
+    Float_t centrality = esdCentrality->GetCentralityPercentile("V0M");
+    //Float_t centralityb = esdCentrality->GetCentralityPercentile("CL1");
+    fNbGoodTracks->Fill(nGoodParticles,centrality);
+    //printf("centrality %f, centralityb %f\n",centrality,centralityb);
+  }
+  
+  if (strstr(type,"Pb-Pb")) {
+    //printf("Will check the number of good tracks\n");
+    if((nGoodParticles < fMinNbTracks) || (nGoodParticles > fMaxNbTracks)) {
+      PostData(1, fListHist);
+      return;
+    }
+  }
+  
   fNEvents->Fill(1);
   
   // In total
@@ -545,8 +574,7 @@ void AliTRDCalibTask::UserExec(Option_t *)
   // TPC
   Int_t nbtrackTPC = 0;
   
-  Double_t nbTracks = fESD->GetNumberOfTracks();
-  //printf("Number of tracks %f\n",nbTracks);  
+
   
   if (nbTracks <= 0.0) {
     
@@ -566,6 +594,11 @@ void AliTRDCalibTask::UserExec(Option_t *)
     PostData(1, fListHist);
     return;
   }
+
+  if(fESDfriend->TestSkipBit()) {
+    PostData(1, fListHist);
+    return;
+  }
   
   //printf("has friends\n");
 
@@ -934,7 +967,9 @@ void AliTRDCalibTask::Plot()
          first += 1;
        }
        else {
-         histolinearfitsum ->Add(linearfit->GetLinearFitterHisto(det));
+          if (histolinearfitsum) {
+           histolinearfitsum->Add(linearfit->GetLinearFitterHisto(det));
+         }
        }
       }
     }
@@ -1073,6 +1108,7 @@ void  AliTRDCalibTask::AddTask(const AliTRDCalibTask * calibTask) {
   if(!listcalibTask) return;
 
   TH1I *nEvents  = (TH1I *) listcalibTask->FindObject("NEvents");
+  TH1I *nEventsInput  = (TH1I *) listcalibTask->FindObject("NEventsInput");
   TH2F *absoluteGain  = (TH2F *) listcalibTask->FindObject("AbsoluteGain");
 
   TH1F *trdTrack = (TH1F *) listcalibTask->FindObject("TRDTrack");
@@ -1108,6 +1144,7 @@ void  AliTRDCalibTask::AddTask(const AliTRDCalibTask * calibTask) {
 
   //
 
+  TH1I *inEventsInput  = (TH1I *) fListHist->FindObject("NEventsInput");
   TH1I *inEvents  = (TH1I *) fListHist->FindObject("NEvents");
   TH2F *iabsoluteGain  = (TH2F *) fListHist->FindObject("AbsoluteGain");
 
@@ -1144,6 +1181,18 @@ void  AliTRDCalibTask::AddTask(const AliTRDCalibTask * calibTask) {
 
 
   // Add
+
+  if(nEventsInput) {
+    if(inEventsInput) {
+      inEventsInput->Add(nEventsInput);
+      //printf("Add Events\n");
+    }
+    else {
+      //printf("Create new Events\n");
+      inEventsInput = new TH1I(*nEventsInput);
+      fListHist->Add(inEventsInput);
+    }
+  }
   
   if(nEvents) {
     if(inEvents) {
@@ -1400,16 +1449,19 @@ Bool_t AliTRDCalibTask::SetVersionSubversion(){
     if(os->GetString().Contains("TRD/Calib/ChamberGainFactor")){
       // Get Old gain calibration
       AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+      fFirstRunGain = id->GetFirstRun();
       fVersionGainUsed = id->GetVersion();
       fSubVersionGainUsed = id->GetSubVersion();
     } else if(os->GetString().Contains("TRD/Calib/ChamberVdrift")){
       // Get Old drift velocity calibration
       AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+      fFirstRunVdrift = id->GetFirstRun();
       fVersionVdriftUsed = id->GetVersion();
       fSubVersionVdriftUsed = id->GetSubVersion();
     } else if(os->GetString().Contains("TRD/Calib/LocalGainFactor")){
       // Get Old drift velocity calibration
       AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+      fFirstRunGainLocal = id->GetFirstRun();
       fVersionGainLocalUsed = id->GetVersion();
       fSubVersionGainLocalUsed = id->GetSubVersion();
     }
@@ -1418,12 +1470,42 @@ Bool_t AliTRDCalibTask::SetVersionSubversion(){
   //printf("VersionGain %d, SubversionGain %d, VersionLocalGain %d, Subversionlocalgain %d, Versionvdrift %d, Subversionvdrift %d\n",fVersionGainUsed,fSubVersionGainUsed,fVersionGainLocalUsed,fSubVersionGainLocalUsed,fVersionVdriftUsed,fSubVersionVdriftUsed);
 
   // Check
-  if((fVersionGainUsed < 0) || (fVersionGainLocalUsed < 0)  || (fSubVersionGainUsed < 0) || (fSubVersionGainLocalUsed < 0) || (fVersionVdriftUsed < 0) || (fSubVersionVdriftUsed < 0)) {
+  if((fFirstRunGain < 0)            || 
+     (fFirstRunGainLocal < 0)       || 
+     (fFirstRunVdrift < 0)          || 
+     (fVersionGainUsed < 0)         || 
+     (fVersionGainLocalUsed < 0)    || 
+     (fSubVersionGainUsed < 0)      || 
+     (fSubVersionGainLocalUsed < 0) || 
+     (fVersionVdriftUsed < 0)       || 
+     (fSubVersionVdriftUsed < 0)) {
     AliError("No recent calibration found");
     return kFALSE;
   }
   else return kTRUE;
 
 }
+//_________________________________________________________________________________________________________________________
+Bool_t AliTRDCalibTask::ParticleGood(int i) const {
+
+  //
+  // Definition of good tracks
+  //
+
+  
+  AliESDtrack *track = fESD->GetTrack(i);
+  if (!track->IsOn(AliESDtrack::kTPCrefit)) return 0;        // TPC refit
+  if (track->GetTPCNcls() < 90) return 0;                    // number of TPC clusters
+  if (fabs(track->Eta())>0.8) return 0;                         // fiducial pseudorapidity
+  Float_t r,z;
+  track->GetImpactParametersTPC(r,z);
+  if (fabs(z)>2.0) return 0;                          // impact parameter in z
+  if (fabs(r)>2.0) return 0;                          // impact parameter in xy
+  if (r==0) return 0;
+  return 1;   
+
+
+}
+