]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AnalyzeSDDInjectorsAllMod.C
Reactivate the method Improve() to reduce the fakes in PbPb -see Savannah bug 71798...
[u/mrichter/AliRoot.git] / ITS / AnalyzeSDDInjectorsAllMod.C
index 6ab8f77530ab2c14764f24ffaf9dfee03300883d..f65a119c63fc32e7174640baa66f932713d0f389 100644 (file)
@@ -7,6 +7,7 @@
 #include <TLatex.h>
 #include <TFile.h>
 #include <TMath.h>
+#include <TNtuple.h>
 #include <TGrid.h>
 #include <TF1.h>
 #include <TLine.h>
@@ -15,6 +16,7 @@
 #include "AliRawReaderRoot.h"
 #include "AliITSOnlineSDDInjectors.h"
 #include "AliITSRawStreamSDD.h"
+#include "AliITSRawStreamSDDCompressed.h"
 #include "AliITSDDLModuleMapSDD.h"
 #endif
 
 // Origin: F. Prino (prino@to.infn.it)
 
 
-void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, Int_t lastEv=15,Int_t jpad=16, Int_t statuscut=7){
+void AnalyzeSDDInjectorsAllMod(Char_t *datafil, 
+                              Int_t adcfreq=20, 
+                              Int_t nDDL=0, 
+                              Int_t firstEv=18, 
+                              Int_t lastEv=30,
+                              Int_t jpad=20, 
+                              Int_t statuscut=7){
+
 
   const Int_t kTotDDL=24;
   const Int_t kModPerDDL=12;
   const Int_t kSides=2;
+  Bool_t writtenoutput=kFALSE;
 
   AliITSDDLModuleMapSDD* dmap=new AliITSDDLModuleMapSDD();
-  dmap->SetJun08Map();
+  dmap->SetJun09Map();
 
+  TNtuple* ntsp=new TNtuple("ntsp","","mod:sid:an:stat:vall:errvall:v23:v13:v12:c1:c2:c3");
+  Float_t xnt[12];
   TH2F** histo = new TH2F*[kTotDDL*kModPerDDL*kSides];
   Int_t nWrittenEv[kTotDDL*kModPerDDL*kSides];
   TGraphErrors** gvel = new TGraphErrors*[kTotDDL*kModPerDDL*kSides];
   AliITSOnlineSDDInjectors **anal=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
+  AliITSOnlineSDDInjectors **anal23=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
+  AliITSOnlineSDDInjectors **anal13=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
+  AliITSOnlineSDDInjectors **anal12=new AliITSOnlineSDDInjectors*[kTotDDL*kModPerDDL*kSides];
   TH1F** hvdriftl=new TH1F*[260];  
   TH1F** hvdriftr=new TH1F*[260];  
   Char_t hisnam[20];
@@ -53,14 +68,27 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
       for(Int_t isid=0;isid<kSides;isid++){
        Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
        sprintf(hisnam,"h%02dc%02ds%d",iddl,imod,isid);
+
        histo[index]=new TH2F(hisnam,"",256,-0.5,255.5,256,-0.5,255.5);
        anal[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
-/* Uncomment these lines for analysis of runs with 40 MHz sapling */
-//     anal[index]->SetInjLineRange(0,20,50);
-//     anal[index]->SetInjLineRange(1,90,160);
-//     anal[index]->SetInjLineRange(2,170,240);
-//     anal[index]->SetTimeStep(25.);
-/* END of lines to be uncommented */
+       if(adcfreq==40) anal[index]->Set40MHzConfig();
+       else anal[index]->Set20MHzConfig();
+
+       anal23[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
+       if(adcfreq==40) anal23[index]->Set40MHzConfig();
+       else anal23[index]->Set20MHzConfig();
+       anal23[index]->SetUseLine(0,kFALSE);
+
+       anal13[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
+       if(adcfreq==40) anal13[index]->Set40MHzConfig();
+       else anal13[index]->Set20MHzConfig();
+       anal13[index]->SetUseLine(1,kFALSE);
+
+       anal12[index]=new AliITSOnlineSDDInjectors(iddl,imod,isid);
+       if(adcfreq==40) anal12[index]->Set40MHzConfig();
+       else anal12[index]->Set20MHzConfig();
+       anal12[index]->SetUseLine(2,kFALSE);
+
        nWrittenEv[index]=0;
       }
     }
@@ -79,6 +107,7 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
   gStyle->SetPalette(1);
   TCanvas* c1 = new TCanvas("c1","Drift Speed vs. anode",900,900);
   Char_t text[50];
+  UInt_t timeSt=0;
 
   Int_t iev=firstEv;
   AliRawReader *rd; 
@@ -101,7 +130,7 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
     c1->Clear();
     c1->Divide(4,6,0.001,0.001);
     printf("Event # %d\n",iev);
-    UInt_t timeSt=rd->GetTimestamp();
+    timeSt=rd->GetTimestamp();
     rd->Reset();
     for(Int_t iddl=0; iddl<kTotDDL;iddl++){
       for(Int_t imod=0; imod<kModPerDDL;imod++){
@@ -112,13 +141,22 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
       }
     }
 
-    AliITSRawStreamSDD s(rd);
-    while(s.Next()){
+
+    UChar_t cdhAttr=AliITSRawStreamSDD::ReadBlockAttributes(rd);
+    UInt_t amSamplFreq=AliITSRawStreamSDD::ReadAMSamplFreqFromCDH(cdhAttr);
+    AliITSRawStream* s=AliITSRawStreamSDD::CreateRawStreamSDD(rd,cdhAttr);
+    if(!writtenoutput){
+      printf("Use %s raw stream, sampling frequency %d MHz\n",s->ClassName(),amSamplFreq);
+      writtenoutput=kTRUE;
+    }
+    while(s->Next()){
       Int_t iDDL=rd->GetDDLID();
-      Int_t iCarlos=s.GetCarlosId();
-      if(iDDL>=0 && iDDL<kTotDDL && s.IsCompletedModule()==kFALSE){ 
-       Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s.GetChannel(); 
-       histo[index]->Fill(s.GetCoord2(),s.GetCoord1(),s.GetSignal());
+      Int_t iCarlos=s->GetCarlosId();
+      if(s->IsCompletedModule()) continue;
+      if(s->IsCompletedDDL()) continue;
+      if(iDDL>=0 && iDDL<kTotDDL){ 
+       Int_t index=kSides*(kModPerDDL*iDDL+iCarlos)+s->GetChannel(); 
+       histo[index]->Fill(s->GetCoord2(),s->GetCoord1(),s->GetSignal());
       }
     }
     
@@ -127,10 +165,12 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
        for(Int_t isid=0;isid<kSides;isid++){
          Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
          anal[index]->AnalyzeEvent(histo[index]); 
-         anal[index]->WriteToASCII(iev,timeSt,nWrittenEv[index]);
+         anal23[index]->AnalyzeEvent(histo[index]); 
+         anal13[index]->AnalyzeEvent(histo[index]); 
+         anal12[index]->AnalyzeEvent(histo[index]); 
          nWrittenEv[index]++;
          Int_t iMod=dmap->GetModuleNumber(iddl,imod);
-         if(iMod!=-1){
+         if(iMod!=-1){     
            for(Int_t ipad=0;ipad<33;ipad++){
              Int_t st=anal[index]->GetInjPadStatus(ipad);
              hanst->Fill(st);
@@ -138,6 +178,19 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
                if(isid==0) hpad7l->Fill(ipad);
                if(isid==1) hpad7r->Fill(ipad);
              }
+             xnt[0]=(Float_t)iMod;
+             xnt[1]=(Float_t)isid;
+             xnt[2]=(Float_t)anal[index]->GetAnodeNumber(ipad);
+             xnt[3]=(Float_t)st;
+             xnt[4]=anal[index]->GetDriftSpeed(ipad);
+             xnt[5]=anal[index]->GetDriftSpeedErr(ipad);
+             xnt[6]=anal23[index]->GetDriftSpeed(ipad);
+             xnt[7]=anal13[index]->GetDriftSpeed(ipad);
+             xnt[8]=anal12[index]->GetDriftSpeed(ipad);
+             xnt[9]=anal[index]->GetCentroid(ipad,0);
+             xnt[10]=anal[index]->GetCentroid(ipad,1);
+             xnt[11]=anal[index]->GetCentroid(ipad,2);
+             ntsp->Fill(xnt);
            }
            if(anal[index]->GetInjPadStatus(jpad)>=statuscut){
              Float_t vel=anal[index]->GetDriftSpeed(jpad);
@@ -170,7 +223,7 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
            gvel[index]->GetXaxis()->SetTitleOffset(0.6);
            gvel[index]->GetYaxis()->SetTitleOffset(0.6);
            if(gvel[index]->GetN()>0) gvel[index]->Draw("AP");
-           Float_t *param=anal[index]->GetDriftSpeedFitParam();
+           Double_t *param=anal[index]->GetDriftSpeedFitParam();
            funz->SetParameters(param[0],param[1],param[2],param[3]);
            funz->SetLineColor(2);
            funz->DrawCopy("LSAME");
@@ -180,6 +233,7 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
        }
       }
     }
+    delete s;
     iev++;
     readEv++;
     printf(" --- OK\n");
@@ -191,13 +245,28 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
   hpad7l->Scale(nfac);
   hpad7r->Scale(nfac);
 
+  TFile *outfil1=new TFile("DriftSpeedVsAnode.root","recreate");  
+  for(Int_t iddl=0; iddl<kTotDDL;iddl++){
+    for(Int_t imod=0; imod<kModPerDDL;imod++){
+      for(Int_t isid=0;isid<kSides;isid++){
+       Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
+       anal[index]->FitMeanDriftSpeedVsAnode();
+       anal[index]->WriteToASCII(0,timeSt,0);
+       anal[index]->WriteInjectorStatusToASCII();
+       anal[index]->WriteToROOT(outfil1);
+      }
+    }
+  }
+  outfil1->Close();
+
   Int_t ipt0=0, ipt1=0;
   Float_t Edrift=(1800-45)/291/0.012;  
   TFile *outfil=new TFile("DriftSpeedHistos.root","recreate");
+  ntsp->Write();
   for(Int_t iMod=0; iMod<260; iMod++){
     outfil->cd();
-    hvdriftl[iMod]->Write();    
-    hvdriftr[iMod]->Write();
+    //    hvdriftl[iMod]->Write();    
+    //    hvdriftr[iMod]->Write();
     Float_t modid=iMod+240;
     if(hvdriftl[iMod]->GetEntries()>0){
       Float_t avevell=hvdriftl[iMod]->GetMean();
@@ -245,7 +314,7 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
   gvvsmod0->SetMinimum(gvmin);
   gvvsmod0->SetMaximum(gvmax);
   gvvsmod0->GetXaxis()->SetTitle("Module Number");
-  Char_t title[25];
+  Char_t title[50];
   sprintf(title,"Vdrift at injector pad %d",jpad);
   gvvsmod0->GetYaxis()->SetTitle(title);  
   gvvsmod1->Draw("PSAME");
@@ -312,12 +381,19 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil, Int_t nDDL, Int_t firstEv=10, In
 
 }
 
-void AnalyzeSDDInjectorsAllMod(Int_t nrun, Int_t n2, Char_t* dir="LHC08d_SDD", Int_t nDDL=0, Int_t firstEv=15, Int_t lastEv=15){
+void AnalyzeSDDInjectorsAllMod(Int_t nrun, Int_t n2, Int_t year=2010, Char_t* dir="LHC10b_SDD",
+                              Int_t adcfreq=20, 
+                              Int_t nDDL=0, 
+                              Int_t firstEv=18, 
+                              Int_t lastEv=25,
+                              Int_t jpad=20, 
+                              Int_t statuscut=7){
+
   TGrid::Connect("alien:",0,0,"t");
   Char_t filnam[200];
-  sprintf(filnam,"alien:///alice/data/2008/%s/%09d/raw/08%09d%03d.10.root",dir,nrun,nrun,n2);
+  sprintf(filnam,"alien:///alice/data/%d/%s/%09d/raw/%02d%09d%03d.10.root",year,dir,nrun,year-2000,nrun,n2);
   printf("Open file %s\n",filnam);
-  AnalyzeSDDInjectorsAllMod(filnam,nDDL,firstEv,lastEv);
+  AnalyzeSDDInjectorsAllMod(filnam,adcfreq,nDDL,firstEv,lastEv,jpad,statuscut);
 }