New features in SDD drift speed objects: a) use different average values for layer...
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 6 Oct 2009 09:53:17 +0000 (09:53 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 6 Oct 2009 09:53:17 +0000 (09:53 +0000)
ITS/AliITSDriftSpeedArraySDD.cxx
ITS/AliITSDriftSpeedArraySDD.h
ITS/AliITSOnlineSDDInjectors.cxx
ITS/AliITSOnlineSDDInjectors.h
ITS/AliITSPreprocessorSDD.cxx
ITS/AliITSPreprocessorSDD.h
ITS/AnalyzeSDDInjectorsAllMod.C
ITS/ShowDriftSpeedSDD.C

index aad7ef6..9ea9ef0 100644 (file)
@@ -31,14 +31,16 @@ ClassImp(AliITSDriftSpeedArraySDD)
 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD():
 TObject(),
 fNEvents(0),
-fDriftSpeedSDD(10){
+fDriftSpeedSDD(10),
+fInjectorStatus(0x3E000000){
   // default constructor
 }
 //______________________________________________________________________
 AliITSDriftSpeedArraySDD::AliITSDriftSpeedArraySDD(Int_t numEv):
 TObject(),
 fNEvents(0),
-fDriftSpeedSDD(numEv){
+fDriftSpeedSDD(numEv),
+fInjectorStatus(0x3E000000){
   // standard constructor
 }
 //______________________________________________________________________
@@ -52,6 +54,7 @@ void AliITSDriftSpeedArraySDD::PrintAll() const{
   // print drift speed parameters for all elements in the array
   printf("Array Size=%d\n",fDriftSpeedSDD.GetSize());
   printf("Array Elements =%d\n",fNEvents);
+  printf("Injector Status =%d\n",fInjectorStatus);
   for(Int_t i=0;i<fNEvents; i++){
     printf("     ====== Array el. #%d ======\n",i);
     AliITSDriftSpeedSDD *d=(AliITSDriftSpeedSDD*)fDriftSpeedSDD.At(i);
index b8245d2..dbe75f0 100644 (file)
@@ -26,15 +26,18 @@ class AliITSDriftSpeedArraySDD : public TObject{
   virtual ~AliITSDriftSpeedArraySDD() {};
 
   void AddDriftSpeed(AliITSDriftSpeedSDD* drSpeed);
-
+  void SetInjectorStatus(UInt_t status=0x3E000000){fInjectorStatus=status;}
   void PrintAll() const;
   UInt_t GetTimestamp(Int_t iElement);
-
+  UInt_t GetInjectorStatus() const {return fInjectorStatus;}
   Double_t GetDriftSpeed(Int_t iEvent, Double_t iAnode);
-
+  
  protected:  
   Int_t fNEvents;               // number of drift speed determination
   TObjArray fDriftSpeedSDD; // array of AliITSDriftSpeedSDD objects
-  ClassDef(AliITSDriftSpeedArraySDD,2);
+  UInt_t fInjectorStatus;   // encoded info on injector status
+                            // see AliITSOnlineSDDInjectors for definition
+
+  ClassDef(AliITSDriftSpeedArraySDD,3);
 };
 #endif
index 30a33c4..c10c855 100644 (file)
@@ -569,3 +569,28 @@ Bool_t AliITSOnlineSDDInjectors::WriteToROOT(TFile *fil) const {
   hdsp.Write();
   return kTRUE;    
 }
+//______________________________________________________________________
+void AliITSOnlineSDDInjectors::WriteInjectorStatusToASCII(){
+  // dump status of injectors encoded into UInt_t
+  // 5 bits (value 0-31) to store number of pads with given status
+  Char_t outfilnam[100];
+  sprintf(outfilnam,"SDDinj_ddl%02dc%02d_sid%d.data",fDDL,fCarlos,fSide);  
+  FILE* outf=fopen(outfilnam,"a");
+  Int_t n[8]={0,0,0,0,0,0,0,0};
+  for(Int_t jpad=fFirstPadForFit; jpad<=fLastPadForFit; jpad++){
+    Int_t statusPad=GetInjPadStatus(jpad);
+    ++n[statusPad];
+  }
+  UInt_t statusInj=0;
+  statusInj+=(n[7]&0x1F)<<25; // bits 25-29: n. of pads with status 7
+  statusInj+=(n[6]&0x1F)<<20; // bits 20-24: n. of pads with status 6
+  statusInj+=(n[5]&0x1F)<<15; // bits 15-19: n. of pads with status 5
+  statusInj+=(n[4]&0x1F)<<10; // bits 10-14: n. of pads with status 4
+  statusInj+=(n[3]&0x1F)<<5;  // bits  5- 9: n. of pads with status 3
+  statusInj+=(n[2]&0x1F);     // bits  0- 4: n. of pads with status 2
+
+  fprintf(outf,"-99 %u\n",statusInj); // -99 used in preprocessor to find line
+                                      // with injector status info
+  fclose(outf);  
+  
+}
index f8fba99..2b0a5d1 100644 (file)
@@ -93,6 +93,7 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
   void PrintInjectorStatus();
   void PrintCentroids();
   void WriteToASCII(Int_t evNumb, UInt_t timeStamp, Int_t optAppend=0);
+  void WriteInjectorStatusToASCII();
   Bool_t WriteToROOT(TFile *fil) const;
 
   void Reset();
index 44a52b0..1c81b32 100644 (file)
@@ -220,16 +220,18 @@ UInt_t AliITSPreprocessorSDD::ProcessInjector(AliITSDDLModuleMapSDD* ddlmap){
   TObjArray vdrift(2*kNumberOfSDD);
   vdrift.SetOwner(kFALSE);
   Int_t evNumb,polDeg; 
-  UInt_t timeStamp;
+  UInt_t timeStamp,statusInj;
   Bool_t modSet[2*kNumberOfSDD]; // flag modules with good inj.
   for(Int_t ihyb=0; ihyb<2*kNumberOfSDD; ihyb++) modSet[ihyb]=0;
-  Double_t nPt = 0;
+  Double_t nPtLay3 = 0;
+  Double_t nPtLay4 = 0;
 
   Double_t param[4];    // parameters of poly fit
   Double_t minValP0=4.; // min value for param[0]
   Double_t maxValP0=9.; // max value for param[0]
   Double_t minValP1=0.; // min value for param[1]
-  Double_t aveCoef[4]={0.,0.,0.,0.};  // average param for good mod.
+  Double_t aveCoefLay3[4]={0.,0.,0.,0.};  // average param for good mod.
+  Double_t aveCoefLay4[4]={0.,0.,0.,0.};  // average param for good mod.
   Double_t defCoef[4]={6.53227,0.00128941,-5.14493e-06,0};  // default values for param
   Float_t auxP;
 
@@ -266,26 +268,33 @@ UInt_t AliITSPreprocessorSDD::ProcessInjector(AliITSDDLModuleMapSDD* ddlmap){
        FILE* injFil = fopen(inpFileName,"read");
        if (injFil == 0) {
          Log(Form("File %s not found.",inpFileName.Data()));
-         AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD();
-         arr->AddDriftSpeed(dsp);
-         vdrift.AddAt(arr,2*modID+isid);
          continue;
        }
        retfscf=fscanf(injFil,"%d",&polDeg);
        while (!feof(injFil)){
          retfscf=fscanf(injFil,"%d %u ",&evNumb,&timeStamp);
-         if(feof(injFil)) break;
-         for(Int_t ic=0;ic<4;ic++){ 
-           retfscf=fscanf(injFil,"%f ",&auxP);
-           param[ic]=auxP;
-         }
+         if(evNumb==-99){
+           statusInj=timeStamp;
+           arr->SetInjectorStatus(statusInj);
+         }else{
+           if(feof(injFil)) break;
+           for(Int_t ic=0;ic<4;ic++){ 
+             retfscf=fscanf(injFil,"%f ",&auxP);
+             param[ic]=auxP;
+           }
 
-         if(param[0]>minValP0 && param[0]<maxValP0 && param[1]>minValP1){
-           for(Int_t ic=0;ic<4;ic++) aveCoef[ic]+=param[ic];
-           nPt++;
-           AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,param);
-           arr->AddDriftSpeed(dsp);
-           modSet[2*modID+isid]=1;
+           if(param[0]>minValP0 && param[0]<maxValP0 && param[1]>minValP1){
+             if(modID<kNumberOfSDDLay3){ 
+               for(Int_t ic=0;ic<4;ic++) aveCoefLay3[ic]+=param[ic];
+               nPtLay3++;
+             }else{ 
+               for(Int_t ic=0;ic<4;ic++) aveCoefLay4[ic]+=param[ic];
+               nPtLay4++;
+             }
+             AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,param);
+             arr->AddDriftSpeed(dsp);
+             modSet[2*modID+isid]=1;
+           }
          }
        }
        fclose(injFil);
@@ -297,20 +306,33 @@ UInt_t AliITSPreprocessorSDD::ProcessInjector(AliITSDDLModuleMapSDD* ddlmap){
 
   // set drift speed for modules with bad injectors
   for(Int_t ic=0;ic<4;ic++){ 
-    if(nPt>0) aveCoef[ic]/=nPt; // mean parameters
-    else aveCoef[ic]=defCoef[ic]; // default parameters
+    if(nPtLay3>0) aveCoefLay3[ic]/=nPtLay3; // mean parameters
+    else aveCoefLay3[ic]=defCoef[ic]; // default parameters
+    if(nPtLay4>0) aveCoefLay4[ic]/=nPtLay4; // mean parameters
+    else aveCoefLay4[ic]=defCoef[ic]; // default parameters
   }
-  AliITSDriftSpeedSDD *avdsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,aveCoef);
+  AliITSDriftSpeedSDD *avdsp3=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,aveCoefLay3);
+  AliITSDriftSpeedSDD *avdsp4=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,aveCoefLay4);
 
-  for(Int_t ihyb=0; ihyb<2*kNumberOfSDD; ihyb++){
+  for(Int_t ihyb=0; ihyb<2*kNumberOfSDDLay3; ihyb++){
     if(modSet[ihyb]==0){ 
-      AliWarning(Form("No good injector events for mod. %d --> use average values",ihyb/2));
+      AliWarning(Form("No good injector events for mod. %d side %d --> use average values for layer 3",ihyb/2,ihyb%2));
       AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD();
-      arr->AddDriftSpeed(avdsp);
+      arr->AddDriftSpeed(avdsp3);
+      arr->SetInjectorStatus(0);
       vdrift.AddAt(arr,ihyb);
     }
   }
 
+  for(Int_t ihyb=2*kNumberOfSDDLay3; ihyb<2*kNumberOfSDD; ihyb++){
+    if(modSet[ihyb]==0){ 
+      AliWarning(Form("No good injector events for mod. %d side %d --> use average values for layer 4",ihyb/2,ihyb%2));
+      AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD();
+      arr->AddDriftSpeed(avdsp4);
+      arr->SetInjectorStatus(0);
+      vdrift.AddAt(arr,ihyb);
+    }
+  }
 
   AliCDBMetaData *md= new AliCDBMetaData();
   md->SetResponsible("Francesco Prino");
index b87184d..b2ffe67 100644 (file)
@@ -27,6 +27,7 @@ class AliITSPreprocessorSDD : public AliPreprocessor {
   virtual ~AliITSPreprocessorSDD(){;}
 
   enum {kNumberOfSDD = 260};    // number of SDD modules
+  enum {kNumberOfSDDLay3 = 84};    // number of SDD modules on layer 3
   enum {kNumberOfDDL = 24};     // number of DDLs in SDD
   enum {kModulesPerDDL = 12};   // number of modules in each DDL 
   enum {kNumberOfChannels = 512}; // number of channels per module
index 4e9db05..f94e99e 100644 (file)
@@ -213,6 +213,7 @@ void AnalyzeSDDInjectorsAllMod(Char_t *datafil,
        Int_t index=kSides*(kModPerDDL*iddl+imod)+isid;
        anal[index]->FitMeanDriftSpeedVsAnode();
        anal[index]->WriteToASCII(0,timeSt,0);
+       anal[index]->WriteInjectorStatusToASCII();
        anal[index]->WriteToROOT(outfil1);
       }
     }
index 995fe9a..e1ee6a6 100644 (file)
@@ -64,7 +64,7 @@ void ShowDriftSpeedSDD(Char_t filnam[150]="$ALICE_ROOT/ITS/Calib/DriftSpeedSDD/R
       gvdr0[i]->SetPoint(iAn,(Float_t)iAn,vel0);
       gvdr1[i]->SetPoint(iAn,(Float_t)iAn,vel1);
     }
-    printf(" Mod. %d \t v(an 128l)= %f",iMod,vdriftarr0->GetDriftSpeed(0,128));
+    printf(" Mod. %d \tStatusLR=%X %X \t v(an 128l)= %f",iMod,vdriftarr0->GetInjectorStatus(),vdriftarr1->GetInjectorStatus(),vdriftarr0->GetDriftSpeed(0,128));
     printf("        \t v(an 128r)= %f\n",vdriftarr1->GetDriftSpeed(0,128));
     c0->cd(1);
     gvdr0[i]->Draw("AP");