]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibCosmic.cxx
from Per Thomas: files for generation of PeakFinder OCDB object
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibCosmic.cxx
index c02dd608ac40a83466a0772d2e8b74a7286ab8a5..aea04cfe3d0552b1e483932efa1f89e295bfc022 100644 (file)
     gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
     gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+")
     AliXRDPROOFtoolkit tool;
-    TChain * chainCosmic = tool.MakeChainRandom("cosmic.txt","Track0",0,10000); 
-  
+    TChain * chainCosmic = tool.MakeChainRandom("cosmicF.txt","Track0",0,10000);
+    //
+    TCut cutITSN="min(Orig0.fITSncls,Orig1.fITSncls)>2";
+    TCut cutTPCN="min(Orig0.fTPCncls,Orig1.fTPCncls)>120";
 
-*/
+    chainCosmic->Draw(">>listITS",cutITSN+cutTPCN,"entryList");
+    TEntryList *elistITS = (TEntryList*)gDirectory->Get("listITS");
+    chainCosmic->SetEntryList(elistITS);
+    
+  */
 
 
 
@@ -56,6 +62,7 @@
 #include "TFile.h"
 #include "TF1.h"
 #include "THnSparse.h"
+#include "TDatabasePDG.h"
 
 #include "AliTPCclusterMI.h"
 #include "AliTPCseed.h"
@@ -74,7 +81,7 @@
 #include "AliTPCcalibCosmic.h"
 #include "TTreeStream.h"
 #include "AliTPCTracklet.h"
-#include "AliESDcosmic.h"
+//#include "AliESDcosmic.h"
 
 
 ClassImp(AliTPCcalibCosmic)
@@ -201,15 +208,15 @@ void AliTPCcalibCosmic::Init(){
   xminTrack[5] =-1; xmaxTrack[5]=1;  // 
   axisName[5]  ="tan(#theta)";
   //
-  binsTrack[6] =10;
-  xminTrack[6] =0; xmaxTrack[6]=2;  // 
+  binsTrack[6] =40;
+  xminTrack[6] =-2; xmaxTrack[6]=2;  // 
   axisName[6]  ="1/pt (1/GeV)";
   //
   binsTrack[7] =40;
   xminTrack[7] =0.2; xmaxTrack[7]=50;  // 
   axisName[7]  ="pt (GeV)";
   //
-  binsTrack[8] =32;
+  binsTrack[8] =18;
   xminTrack[8] =0; xmaxTrack[8]=TMath::Pi();  // 
   axisName[8]  ="alpha";
   //
@@ -320,9 +327,9 @@ void AliTPCcalibCosmic::Process(AliESDEvent *event) {
     Printf("ERROR: ESD not available");
     return;
   }  
-  AliESDfriend *ESDfriend=static_cast<AliESDfriend*>(event->FindListObject("AliESDfriend"));
-  if (!ESDfriend) {
-   Printf("ERROR: ESDfriend not available");
+  AliESDfriend *esdFriend=static_cast<AliESDfriend*>(event->FindListObject("AliESDfriend"));
+  if (!esdFriend) {
+   Printf("ERROR: esdFriend not available");
    return;
   }
    
@@ -333,19 +340,22 @@ void AliTPCcalibCosmic::Process(AliESDEvent *event) {
   Int_t ntracks=event->GetNumberOfTracks(); 
   fHistNTracks->Fill(ntracks);
   if (ntracks==0) return;
-  AliESDcosmic cosmicESD;    
-  TTreeSRedirector * cstream =  GetDebugStreamer();
-  cosmicESD.SetDebugStreamer(cstream);
-  cosmicESD.ProcessEvent(event);
-  if (cstream) cosmicESD.DumpToTree();
//  AliESDcosmic cosmicESD;    
+//   TTreeSRedirector * cstream =  GetDebugStreamer();
+//   cosmicESD.SetDebugStreamer(cstream);
+//   cosmicESD.ProcessEvent(event);
+//   if (cstream) cosmicESD.DumpToTree();
       
   
 }
 
 
-void AliTPCcalibCosmic::FillHistoPerformance(AliExternalTrackParam *par0, AliExternalTrackParam *par1, AliExternalTrackParam *inner0, AliExternalTrackParam *inner1, AliTPCseed *seed0,  AliTPCseed *seed1){
-  //
+void AliTPCcalibCosmic::FillHistoPerformance(const AliExternalTrackParam *par0, const AliExternalTrackParam *par1, const AliExternalTrackParam *inner0, const AliExternalTrackParam */*inner1*/, AliTPCseed *seed0,  AliTPCseed *seed1, const AliExternalTrackParam *param0Combined ){
   //
+  // par0,par1       - parameter of tracks at DCA 0
+  // inner0,inner1   - parameter of tracks at the TPC entrance
+  // seed0, seed1    - detailed track information
+  // param0Combined  - Use combined track parameters for binning
   //
   Int_t kMinCldEdx =20;
   Int_t ncl0 = seed0->GetNumberOfClusters();
@@ -364,11 +374,11 @@ void AliTPCcalibCosmic::FillHistoPerformance(AliExternalTrackParam *par0, AliExt
   // bin parameters
   x[1] = TMath::Min(ncl0,ncl1);
   x[2] = (radius0+radius1)*0.5;
-  x[3] = (inner0->GetZ()+inner1->GetZ())*0.5;
-  x[4] = (inner0->GetSnp()-inner1->GetSnp())*0.5;
-  x[5] = (inner0->GetTgl()-inner1->GetTgl())*0.5;
-  x[6] = (1/par0->Pt()+1/par1->Pt())*0.5;
-  x[7] = (par0->Pt()+par1->Pt())*0.5;
+  x[3] = param0Combined->GetZ();
+  x[4] = inner0->GetSnp();
+  x[5] = param0Combined->GetTgl();
+  x[6] = param0Combined->GetSigned1Pt();
+  x[7] = param0Combined->Pt();
   x[8] = alpha;
   // deltas
   Double_t delta[6];
@@ -440,7 +450,60 @@ void AliTPCcalibCosmic::FillHistoPerformance(AliExternalTrackParam *par0, AliExt
   
 }
 
-
+void AliTPCcalibCosmic::MaterialBudgetDump(AliExternalTrackParam *const par0, AliExternalTrackParam *const par1, const AliExternalTrackParam *inner0, const AliExternalTrackParam *inner1, AliTPCseed *const seed0,  AliTPCseed *const seed1, AliExternalTrackParam *const param0Combined, AliExternalTrackParam *const param1Combined){
+  //
+  // matrial budget AOD dump
+  //
+  // par0,par1       - parameter of tracks at DCA 0
+  // inner0,inner1   - parameter of tracks at the TPC entrance
+  // seed0, seed1    - detailed track information
+  // param0Combined  - Use combined track parameters for binning
+  // param1Combined  - 
+  Double_t p0In = inner0->GetP(); 
+  Double_t p1In = inner1->GetP(); 
+  Double_t p0V  = par0->GetP(); 
+  Double_t p1V  = par1->GetP(); 
+  //
+  Double_t pt0In = inner0->Pt(); 
+  Double_t pt1In = inner1->Pt(); 
+  Double_t pt0V  = par0->Pt(); 
+  Double_t pt1V  = par1->Pt(); 
+  Int_t ncl0 = seed0->GetNumberOfClusters();
+  Int_t ncl1 = seed1->GetNumberOfClusters();
+  Int_t nclmin=TMath::Min(ncl0,ncl1);
+  Double_t sign = (param0Combined->GetSigned1Pt()>0) ? 1:-1.;
+  //
+  TTreeSRedirector * pcstream =  GetDebugStreamer();
+  if (pcstream){
+    (*pcstream)<<"material"<<
+      "run="<<fRun<<              //  run number
+      "event="<<fEvent<<          //  event number
+      "time="<<fTime<<            //  time stamp of event
+      "trigger="<<fTrigger<<      //  trigger
+      "triggerClass="<<&fTriggerClass<<      //  trigger
+      "mag="<<fMagF<<             //  magnetic field
+      "sign="<<sign<<             // sign of the track
+      //
+      "ncl0="<<ncl0<<
+      "ncl1="<<ncl1<<
+      "nclmin="<<nclmin<<
+      //
+      "p0In="<<p0In<<
+      "p1In="<<p1In<<
+      "p0V="<<p0V<<
+      "p1V="<<p1V<<
+      "pt0In="<<pt0In<<
+      "pt1In="<<pt1In<<
+      "pt0V="<<pt0V<<
+      "pt1V="<<pt1V<<
+      "p0.="<<par0<<
+      "p1.="<<par1<<
+      "up0.="<<param0Combined<<
+      "up1.="<<param1Combined<<
+      "\n";
+  }
+  
+}
 
 void AliTPCcalibCosmic::Analyze() {
 
@@ -460,7 +523,7 @@ void AliTPCcalibCosmic::FindPairs(AliESDEvent *event) {
   // Track1 is choosen in lower TPC part
   //
   if (GetDebugLevel()>20) printf("Hallo world: Im here\n");
-  AliESDfriend *ESDfriend=static_cast<AliESDfriend*>(event->FindListObject("AliESDfriend"));
+  AliESDfriend *esdFriend=static_cast<AliESDfriend*>(event->FindListObject("AliESDfriend"));
   Int_t ntracks=event->GetNumberOfTracks(); 
   TObjArray  tpcSeeds(ntracks);
   if (ntracks==0) return;
@@ -481,9 +544,10 @@ void AliTPCcalibCosmic::FindPairs(AliESDEvent *event) {
    if (ntracks>4 && TMath::Abs(trackIn->GetTgl())<0.0015) continue;  // filter laser 
 
 
-   AliESDfriendTrack *friendTrack = ESDfriend->GetTrack(i);
+   AliESDfriendTrack *friendTrack = esdFriend->GetTrack(i);
+   if (!friendTrack) continue;
    TObject *calibObject;
-   AliTPCseed *seed = 0;
+   AliTPCseed *seed = 0;   
    for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) {
      if ((seed=dynamic_cast<AliTPCseed*>(calibObject))) break;
    }
@@ -495,11 +559,11 @@ void AliTPCcalibCosmic::FindPairs(AliESDEvent *event) {
      //
      if (meanP > 0.4 && meanP < 0.45) fDeDxMIP->Fill(seed->CookdEdxNorm(0.0,0.45,0,0,159));
      //
-     if (GetDebugLevel()>0&&meanP>0.2&&seed->CookdEdxNorm(0.0,0.45,0,0,159)>300) {
-       TFile *curfile = AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile();
-       if (curfile) printf(">>> p+ in file: %s \t event: %i \t Number of ESD tracks: %i \n", curfile->GetName(), (int)event->GetEventNumberInFile(), (int)ntracks);
-       if (track->GetOuterParam()->GetAlpha()<0) cout << " Polartiy: " << track->GetSign() << endl;
-     }
+     // if (GetDebugLevel()>0&&meanP>0.2&&seed->CookdEdxNorm(0.0,0.45,0,0,159)>300) {
+//        //TFile *curfile = AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile();
+//        //if (curfile) printf(">>> p+ in file: %s \t event: %i \t Number of ESD tracks: %i \n", curfile->GetName(), (int)event->GetEventNumberInFile(), (int)ntracks);
+//        // if (track->GetOuterParam()->GetAlpha()<0) cout << " Polartiy: " << track->GetSign() << endl;
+//      }
 
    }
 
@@ -565,8 +629,11 @@ void AliTPCcalibCosmic::FindPairs(AliESDEvent *event) {
       //
       // Propagate using Magnetic field and correct fo material budget
       //
-      AliTracker::PropagateTrackTo(&param0,dmax+1,0.0005,3,kTRUE);
-      AliTracker::PropagateTrackTo(&param1,dmax+1,0.0005,3,kTRUE);
+      Double_t sign0=-1;
+      Double_t sign1=1;
+      Double_t maxsnp=0.90;
+      AliTracker::PropagateTrackToBxByBz(&param0,dmax+1,TDatabasePDG::Instance()->GetParticle("e-")->Mass(),3,kTRUE,maxsnp,sign0);
+      AliTracker::PropagateTrackToBxByBz(&param1,dmax+1,TDatabasePDG::Instance()->GetParticle("e-")->Mass(),3,kTRUE,maxsnp,sign1);
       //
       // Propagate rest to the 0,0 DCA - z should be ignored
       //
@@ -606,8 +673,8 @@ void AliTPCcalibCosmic::FindPairs(AliESDEvent *event) {
        //
        //
        //
-       FillHistoPerformance(&param0, &param1, ip0, ip1, seed0, seed1);
-
+       FillHistoPerformance(&param0, &param1, ip0, ip1, seed0, seed1,par0U);
+       MaterialBudgetDump(&param0, &param1, ip0, ip1, seed0, seed1,par0U,par1U);
        if (cstream) {
          (*cstream) << "Track0" <<
            "run="<<fRun<<              //  run number
@@ -690,7 +757,7 @@ void  AliTPCcalibCosmic::FillAcordeHist(AliESDtrack *upperTrack) {
   // Pt cut to select straight tracks which can be easily propagated to ACORDE which is outside the magnetic field
   if (upperTrack->Pt() < 10 || upperTrack->GetTPCNcls() < 80) return;
     
-  const Double_t AcordePlane = 850.; // distance of the central Acorde detectors to the beam line at y =0
+  const Double_t acordePlane = 850.; // distance of the central Acorde detectors to the beam line at y =0
   const Double_t roof = 210.5;       // distance from x =0 to end of magnet roof
 
   Double_t r[3];
@@ -698,16 +765,16 @@ void  AliTPCcalibCosmic::FillAcordeHist(AliESDtrack *upperTrack) {
   Double_t d[3];
   upperTrack->GetDirection(d);
   Double_t x,z;
-  z = r[2] + (d[2]/d[1])*(AcordePlane - r[1]);
-  x = r[0] + (d[0]/d[1])*(AcordePlane - r[1]);
+  z = r[2] + (d[2]/d[1])*(acordePlane - r[1]);
+  x = r[0] + (d[0]/d[1])*(acordePlane - r[1]);
   
   if (x > roof) {
-    x = r[0] + (d[0]/(d[0]+d[1]))*(AcordePlane+roof-r[0]-r[1]);
-    z = r[2] + (d[2]/(d[0]+d[1]))*(AcordePlane+roof-r[0]-r[1]);
+    x = r[0] + (d[0]/(d[0]+d[1]))*(acordePlane+roof-r[0]-r[1]);
+    z = r[2] + (d[2]/(d[0]+d[1]))*(acordePlane+roof-r[0]-r[1]);
   }
   if (x < -roof) {
-    x = r[0] + (d[0]/(d[1]-d[0]))*(AcordePlane+roof+r[0]-r[1]);              
-    z = r[2] + (d[2]/(d[1]-d[0]))*(AcordePlane+roof+r[0]-r[1]);
+    x = r[0] + (d[0]/(d[1]-d[0]))*(acordePlane+roof+r[0]-r[1]);              
+    z = r[2] + (d[2]/(d[1]-d[0]))*(acordePlane+roof+r[0]-r[1]);
   } 
 
   fModules->Fill(z, x);
@@ -716,7 +783,7 @@ void  AliTPCcalibCosmic::FillAcordeHist(AliESDtrack *upperTrack) {
 
 
 
-Long64_t AliTPCcalibCosmic::Merge(TCollection *li) {
+Long64_t AliTPCcalibCosmic::Merge(TCollection *const li) {
 
   TIterator* iter = li->MakeIterator();
   AliTPCcalibCosmic* cal = 0;
@@ -779,11 +846,11 @@ Double_t AliTPCcalibCosmic::CalculateMIPvalue(TH1F * hist) {
   funcDoubleGaus->SetParameters(hist->GetEntries()*0.75,hist->GetMean()/1.3,hist->GetMean()*0.10,
                                hist->GetEntries()*0.25,hist->GetMean()*1.3,hist->GetMean()*0.10);
   hist->Fit(funcDoubleGaus);
-  Double_t MIPvalue = TMath::Min(funcDoubleGaus->GetParameter(1),funcDoubleGaus->GetParameter(4));
+  Double_t aMIPvalue = TMath::Min(funcDoubleGaus->GetParameter(1),funcDoubleGaus->GetParameter(4));
 
   delete funcDoubleGaus;
 
-  return MIPvalue;
+  return aMIPvalue;
 
 }
 
@@ -799,7 +866,7 @@ void AliTPCcalibCosmic::CalculateBetheParams(TH2F */*hist*/, Double_t * /*initia
 }
 
 
-void AliTPCcalibCosmic::BinLogX(THnSparse *h, Int_t axisDim) {
+void AliTPCcalibCosmic::BinLogX(THnSparse *const h, Int_t axisDim) {
 
   // Method for the correct logarithmic binning of histograms
 
@@ -808,21 +875,21 @@ void AliTPCcalibCosmic::BinLogX(THnSparse *h, Int_t axisDim) {
 
   Double_t from = axis->GetXmin();
   Double_t to = axis->GetXmax();
-  Double_t *new_bins = new Double_t[bins + 1];
+  Double_t *newBins = new Double_t[bins + 1];
 
-  new_bins[0] = from;
+  newBins[0] = from;
   Double_t factor = pow(to/from, 1./bins);
 
   for (int i = 1; i <= bins; i++) {
-   new_bins[i] = factor * new_bins[i-1];
+   newBins[i] = factor * newBins[i-1];
   }
-  axis->Set(bins, new_bins);
-  delete new_bins;
+  axis->Set(bins, newBins);
+  delete [] newBins;
 
 }
 
 
-void AliTPCcalibCosmic::BinLogX(TH1 *h) {
+void AliTPCcalibCosmic::BinLogX(TH1 *const h) {
 
   // Method for the correct logarithmic binning of histograms
 
@@ -831,16 +898,16 @@ void AliTPCcalibCosmic::BinLogX(TH1 *h) {
 
   Double_t from = axis->GetXmin();
   Double_t to = axis->GetXmax();
-  Double_t *new_bins = new Double_t[bins + 1];
+  Double_t *newBins = new Double_t[bins + 1];
    
-  new_bins[0] = from;
+  newBins[0] = from;
   Double_t factor = pow(to/from, 1./bins);
   
   for (int i = 1; i <= bins; i++) {
-   new_bins[i] = factor * new_bins[i-1];
+   newBins[i] = factor * newBins[i-1];
   }
-  axis->Set(bins, new_bins);
-  delete new_bins;
+  axis->Set(bins, newBins);
+  delete [] newBins;
   
 }