]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDCalibTask.cxx
Macros for Phi analysis in pPb (Ajay)
[u/mrichter/AliRoot.git] / TRD / AliTRDCalibTask.cxx
index dc0b5de0585754a56561f2362b300e7b41fc044a..39cf64f7b75be94773e2cbd7999e9979253d780f 100644 (file)
@@ -78,6 +78,9 @@ using namespace std;
 #include "AliLog.h"
 
 #include "AliTRDCalibChamberStatus.h"
+#include "AliTRDdEdxBaseUtils.h"
+#include "AliTRDdEdxCalibHistArray.h"
+#include "AliTRDdEdxCalibUtils.h"
 
 #include "AliTRDCalibTask.h"
 
@@ -85,88 +88,94 @@ using namespace std;
 ClassImp(AliTRDCalibTask)
 
 //________________________________________________________________________
-  AliTRDCalibTask::AliTRDCalibTask(const char *name) 
-    : AliAnalysisTaskSE(name), fESD(0),
-      fESDfriend(0),
-      fkEsdTrack(0),
-      fFriendTrack(0),
-      fCalibObject(0),
-      fTrdTrack(0),
-      fCl(0),
-      fListHist(0),
-      fTRDCalibraFillHisto(0),
-      fTRDChamberStatus(0),
-      fNEvents(0),
-      fNEventsInput(0),
-      fNbTRDTrack(0),
-      fNbTRDTrackOffline(0),
-      fNbTRDTrackStandalone(0),
-      fNbTPCTRDtrack(0),
-      fNbGoodTracks(0),
-      fNbTimeBin(0),
-      fNbTimeBinOffline(0),
-      fNbTimeBinStandalone(0),
-      fNbClusters(0),
-      fNbClustersOffline(0),
-      fNbClustersStandalone(0),
-      fNbTracklets(0),
-      fNbTrackletsOffline(0),
-      fNbTrackletsStandalone(0),
-      fAbsoluteGain(0),
-      fCH2dSum(0),
-      fPH2dSum(0),
-      fCH2dSM(0),
-      fPH2dSM(0),
-      fCH2dTest(0),
-      fPH2dTest(0),
-      fLinearVdriftTest(0),
-      fOnInstance(kTRUE),
-      fHisto2d(kTRUE),
-      fVector2d(kFALSE),
-      fVdriftLinear(kTRUE),
-      fExbAlt(kFALSE),
-      fDebugLevelTRDCalibraFillHisto(0),
-      fNbTimeBins(0),
-      fNumberBinCharge(50),
-      fSelectTrigger(kTRUE),
-      fSelectedTrigger(new TObjArray()),
-      fRejected(kTRUE),
-      fEsdTrackCuts(0),
-      fRequirePrimaryVertex(kFALSE),
-      fVtxTPC(kFALSE),
-      fVtxSPD(kFALSE),
-      fMinNbContributors(0),
-      fRangePrimaryVertexZ(9999999.0),
-      fMinNbTracks(9),
-      fMaxNbTracks(999999999),
-      fCutWithVdriftCalib(kFALSE),
-      fMinNbTRDtracklets(0),
-      fMinTRDMomentum(0),
-      fLow(0),
-      fHigh(30),
-      fFillZero(kFALSE),
-      fNormalizeNbOfCluster(kFALSE),
-      fRelativeScale(0.0),
-      fMaxCluster(100.0),
-      fNbMaxCluster(2),
-      fOfflineTracks(kFALSE),
-      fStandaloneTracks(kFALSE),
-      fFirstRunGain(-1),
-      fVersionGainUsed(-1),
-      fSubVersionGainUsed(-1),
-      fFirstRunGainLocal(-1),
-      fVersionGainLocalUsed(-1),
-      fSubVersionGainLocalUsed(-1),
-      fFirstRunVdrift(-1),
-      fVersionVdriftUsed(-1), 
-      fSubVersionVdriftUsed(-1),
-      fFirstRunExB(-1),
-      fVersionExBUsed(-1), 
-      fSubVersionExBUsed(-1),
-      fCalDetGain(0x0),
-      fMaxEvent(0),
-      fCounter(0),
-      fDebug(0)
+AliTRDCalibTask::AliTRDCalibTask(const char *name) 
+: AliAnalysisTaskSE(name), fESD(0),
+  fkEsdTrack(0),
+  fFriendTrack(0),
+  fCalibObject(0),
+  fTrdTrack(0),
+  fCl(0),
+  fListHist(0),
+  fTRDCalibraFillHisto(0),
+  fTRDChamberStatus(0),
+  fNEvents(0),
+  fNEventsInput(0),
+  fNbTRDTrack(0),
+  fNbTRDTrackOffline(0),
+  fNbTRDTrackStandalone(0),
+  fNbTPCTRDtrack(0),
+  fNbGoodTracks(0),
+  fNbTimeBin(0),
+  fNbTimeBinOffline(0),
+  fNbTimeBinStandalone(0),
+  fNbClusters(0),
+  fNbClustersOffline(0),
+  fNbClustersStandalone(0),
+  fNbTracklets(0),
+  fNbTrackletsOffline(0),
+  fNbTrackletsStandalone(0),
+  fAbsoluteGain(0),
+  fCH2dSum(0),
+  fPH2dSum(0),
+  fCH2dSM(0),
+  fPH2dSM(0),
+  fCH2dTest(0),
+  fPH2dTest(0),
+  fLinearVdriftTest(0),
+  fOnInstance(kTRUE),
+  fHisto2d(kTRUE),
+  fVector2d(kFALSE),
+  fVdriftLinear(kTRUE),
+  fExbAlt(kFALSE),
+  fDebugLevelTRDCalibraFillHisto(0),
+  fNbTimeBins(0),
+  fNumberBinCharge(100),
+  fRangeCharge(150),
+  fVdBindx(32), 
+  fVdBindy(70), 
+  fVdRangex(0.8),
+  fVdRangey(1.4),
+  fSelectTrigger(kTRUE),
+  fSelectedTrigger(new TObjArray()),
+  fRejected(kTRUE),
+  fEsdTrackCuts(0),
+  fRequirePrimaryVertex(kFALSE),
+  fVtxTPC(kFALSE),
+  fVtxSPD(kFALSE),
+  fMinNbContributors(0),
+  fRangePrimaryVertexZ(9999999.0),
+  fRejectPileUpWithSPD(kFALSE),
+  fMinNbTracks(9),
+  fMaxNbTracks(999999999),
+  fCutWithVdriftCalib(kFALSE),
+  fMinNbTRDtracklets(0),
+  fMinTRDMomentum(0),
+  fScaleGainWithTPCSignal(kFALSE),
+  fLow(0),
+  fHigh(30),
+  fFillZero(kFALSE),
+  fNormalizeNbOfCluster(kFALSE),
+  fRelativeScale(0.0),
+  fMaxCluster(100.0),
+  fNbMaxCluster(2),
+  fOfflineTracks(kFALSE),
+  fStandaloneTracks(kFALSE),
+  fFirstRunGain(-1),
+  fVersionGainUsed(-1),
+  fSubVersionGainUsed(-1),
+  fFirstRunGainLocal(-1),
+  fVersionGainLocalUsed(-1),
+  fSubVersionGainLocalUsed(-1),
+  fFirstRunVdrift(-1),
+  fVersionVdriftUsed(-1), 
+  fSubVersionVdriftUsed(-1),
+  fFirstRunExB(-1),
+  fVersionExBUsed(-1), 
+  fSubVersionExBUsed(-1),
+  fCalDetGain(0x0),
+  fMaxEvent(0),
+  fCounter(0),
+  fPHQon(kTRUE)
 {
   //
   // Default constructor
@@ -180,6 +189,7 @@ ClassImp(AliTRDCalibTask)
   fNrphi[1] = 0;
   fNrphi[2] = 0;
 
+  
   // Define input and output slots here
   // Input slot #0 works with a TChain
   DefineInput(0, TChain::Class());
@@ -221,6 +231,10 @@ AliTRDCalibTask::~AliTRDCalibTask()
   if(fCH2dTest) delete fCH2dTest;
   if(fPH2dTest) delete fPH2dTest;
   if(fLinearVdriftTest) delete fLinearVdriftTest;
+  if(IsPHQon()){
+    AliTRDdEdxCalibUtils::DeleteHistArray();
+  }
+
   if(fCalDetGain) delete fCalDetGain;
   
   if(fSelectedTrigger) {
@@ -277,6 +291,7 @@ void AliTRDCalibTask::UserCreateOutputObjects()
     fTRDCalibraFillHisto->SetLinearFitterOn(fVdriftLinear); // Other possibility vdrift VDRIFT
     fTRDCalibraFillHisto->SetLinearFitterDebugOn(fVdriftLinear); // Other possibility vdrift
     fTRDCalibraFillHisto->SetExbAltFitOn(fExbAlt); // Alternative method for exb
+    fTRDCalibraFillHisto->SetScaleWithTPCSignal(fScaleGainWithTPCSignal); // Scale Gain with TPC signal
     for(Int_t k = 0; k < 3; k++){
       if(((fNz[k] != 10) && (fNrphi[k] != 10)) && ((fNz[k] != 100) && (fNrphi[k] != 100))) {
        fTRDCalibraFillHisto->SetNz(k,fNz[k]);                                    // Mode calibration
@@ -312,7 +327,16 @@ void AliTRDCalibTask::UserCreateOutputObjects()
       fListHist->Add(fTRDCalibraFillHisto->GetPH2d()); 
       fListHist->Add(fTRDCalibraFillHisto->GetPRF2d());
     } 
-    if(fVdriftLinear) fListHist->Add((TObject *)fTRDCalibraFillHisto->GetVdriftLinearFit());
+    if(fVdriftLinear) {
+      AliTRDCalibraVdriftLinearFit *fvdl = fTRDCalibraFillHisto->GetVdriftLinearFit();
+      if(fvdl){
+       fvdl->SetNbBindx(fVdBindx);
+       fvdl->SetNbBindy(fVdBindy); 
+       fvdl->SetRangedx(fVdRangex); 
+       fvdl->SetRangedy(fVdRangey);  
+      }
+      fListHist->Add((TObject *)fTRDCalibraFillHisto->GetVdriftLinearFit());
+    }
     if(fVector2d) fListHist->Add((TObject *) fTRDCalibraFillHisto->GetCalibraVector()); //calibra vector
     if(fExbAlt) fListHist->Add((TObject *)fTRDCalibraFillHisto->GetExbAltFit());
   }
@@ -341,6 +365,15 @@ void AliTRDCalibTask::UserCreateOutputObjects()
   fAbsoluteGain->Sumw2();
   fListHist->Add(fAbsoluteGain);
   
+  if(IsPHQon()){
+    printf("\n        AliTRDCalibTask PHQ is on!!     \n\n");
+    AliTRDdEdxBaseUtils::PrintControl();
+    AliTRDdEdxCalibUtils::IniHistArray(fListHist, kTRUE);
+  }
+  else{
+    printf("\n        AliTRDCalibTask PHQ is off!!     \n\n");
+  }
+
   /////////////////////////////////////////
   // First debug level
   ///////////////////////////////////////
@@ -562,7 +595,7 @@ void AliTRDCalibTask::UserExec(Option_t *)
   //cout << "event = " << fCounter << endl;
   
   //printf("Counter %d\n",fCounter);
-  
+
   ///////////////////
   // Check trigger
   ///////////////////
@@ -630,7 +663,19 @@ void AliTRDCalibTask::UserExec(Option_t *)
   }
   
   //printf("Primary vertex passed\n");
+
+  //////////////////////////////////
+  // Reject pile-up with SPD
+  //////////////////////////////////
   
+  if(fRejectPileUpWithSPD) {
+    if(fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5)){
+      //printf("test\n");
+      PostData(1, fListHist);
+      return;
+    }
+  }
+
   //////////////////////////////////////
   // Requirement on number of good tracks
   //////////////////////////////////////
@@ -670,7 +715,7 @@ void AliTRDCalibTask::UserExec(Option_t *)
   Int_t nbtrackTPC = 0;
   
 
-  
+
   if (nbTracks <= 0.0) {
     
     if(fDebug > 1) {
@@ -681,8 +726,8 @@ void AliTRDCalibTask::UserExec(Option_t *)
     PostData(1, fListHist);
     return;
   }
-  
-  
+
+
   fESDfriend = dynamic_cast<AliESDfriend*> (fESD->FindListObject("AliESDfriend"));
   if(!fESDfriend){
     AliError("fESDfriend not available");
@@ -694,14 +739,15 @@ void AliTRDCalibTask::UserExec(Option_t *)
     PostData(1, fListHist);
     return;
   }
-  
+
   //printf("has friends\n");
 
   /////////////////////////////////////
   // Loop on AliESDtrack
   ////////////////////////////////////
-  //printf("Nb of tracks %f\n",nbTracks);      
-  for(int itrk=0; itrk < nbTracks; ++itrk){
+  //printf("Nb of tracks %f\n",nbTracks); 
+  Int_t nbTracksfriends = fESDfriend->GetNumberOfTracks();     
+  for(int itrk=0; itrk < nbTracksfriends; ++itrk){
     
     // Get ESD track
     fkEsdTrack = fESD->GetTrack(itrk);
@@ -709,7 +755,10 @@ void AliTRDCalibTask::UserExec(Option_t *)
     ULong_t status = fkEsdTrack->GetStatus(); 
     if(status&(AliESDtrack::kTPCout)) ++nbtrackTPC;
     
+    // Fix suggested by Alex
     fFriendTrack = fESDfriend->GetTrack(itrk);
+    //printf("itrk %d\n",itrk);
+    //fFriendTrack = (fESDfriend->GetNumberOfTracks()>itrk)?fESDfriend->GetTrack(itrk):NULL;
     if(!fFriendTrack)  {
       //printf("No friend track %d\n",itrk);
       continue;
@@ -760,7 +809,7 @@ void AliTRDCalibTask::UserExec(Option_t *)
       //printf("Not a good track\n");
       continue;
     }
-    
+
     // First Absolute gain calibration
     Int_t trdNTracklets = (Int_t) fkEsdTrack->GetTRDntracklets();
     Int_t trdNTrackletsPID = (Int_t) fkEsdTrack->GetTRDntrackletsPID(); 
@@ -785,9 +834,16 @@ void AliTRDCalibTask::UserExec(Option_t *)
       fTRDCalibraFillHisto->UpdateHistogramsV1(fTrdTrack,fkEsdTrack);
       //printf("Fill fTRDCalibraFillHisto\n");
     }
-      
-      
-         
+
+    if(IsPHQon()){
+      const Double_t mag = AliTRDdEdxBaseUtils::IsExBOn() ? fESD->GetMagneticField() : -1;
+      const Int_t charge = AliTRDdEdxBaseUtils::IsExBOn() ? fkEsdTrack->Charge() : -1;
+      const Double_t toTPCscale = AliTRDdEdxCalibUtils::GetCalibTPCscale(fkEsdTrack->GetTPCncls(), fkEsdTrack->GetTPCsignal());
+      if(toTPCscale>0){
+        AliTRDdEdxCalibUtils::FillHist(fTrdTrack, 0, mag, charge, toTPCscale);
+      }
+    }
+
     //////////////////////////////////
     // Debug 
     ////////////////////////////////
@@ -1326,7 +1382,7 @@ Bool_t AliTRDCalibTask::SetVersionSubversion(){
   // Load Chamber Gain factors into the Tender supply
   //
   
-  printf("SetVersionSubversion\n");
+  //printf("SetVersionSubversion\n");
 
   //find previous entry from the UserInfo
   TTree *tree=((TChain*)GetInputData(0))->GetTree();