]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSOnlineSDDInjectors.cxx
Added protections to avoid crashes with bad modules
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDInjectors.cxx
index 85ad7de04e4b1fd827e6f3ed40d4cbb24ad45005..5c082dceae1ef8e8d6085733e88c5a911a19cc07 100644 (file)
@@ -45,7 +45,7 @@ AliITSOnlineSDDInjectors::AliITSOnlineSDDInjectors():AliITSOnlineSDD(),fHisto(),
   SetTimeDiffTB();
 }
 //______________________________________________________________________
-AliITSOnlineSDDInjectors::AliITSOnlineSDDInjectors(Int_t mod, Int_t sid):AliITSOnlineSDD(mod,sid),fHisto(),fTbZero(0.),fParam(),fPolOrder(0),fMinDriftVel(0.),fMaxDriftVel(0.),fThreshold(0.),fTimeDiffTB()
+AliITSOnlineSDDInjectors::AliITSOnlineSDDInjectors(Int_t nddl, Int_t ncarlos, Int_t sid):AliITSOnlineSDD(nddl,ncarlos,sid),fHisto(),fTbZero(0.),fParam(),fPolOrder(0),fMinDriftVel(0.),fMaxDriftVel(0.),fThreshold(0.),fTimeDiffTB()
 { 
 // standard constructor
   SetMinDriftVel();
@@ -248,7 +248,7 @@ void AliITSOnlineSDDInjectors::CalcDriftVelocity(Int_t jlin){
     ey[i]=fRMSCentroid[jlin][i];
   }
   for(Int_t i=0;i<3;i++){
-    if(fGoodInj[jlin][i]){
+    if(fGoodInj[jlin][i] && ey[i]!=0){
       sumY+=y[i]/ey[i]/ey[i];
       sumX+=fPosition[i]/ey[i]/ey[i];
       sumXX+=fPosition[i]*fPosition[i]/ey[i]/ey[i];
@@ -264,14 +264,18 @@ void AliITSOnlineSDDInjectors::CalcDriftVelocity(Int_t jlin){
   if(npt>1){ 
     Float_t slope=(sumWEI*sumXY-sumY*sumX)/(sumWEI*sumXX-sumX*sumX);
     Float_t eslope=TMath::Sqrt(sumWEI/(sumWEI*sumXX-sumX*sumX));
-    vel=1./slope*10000./25.;// micron/ns
-    evel=eslope/slope/slope*10000./25.;// micron/ns
+    if(slope!=0){
+      vel=1./slope*10000./25.;// micron/ns
+      evel=eslope/slope/slope*10000./25.;// micron/ns
+    }
   }
   if(npt==1){
     Float_t slope=(sumY-tzero)/sumX;
     Float_t eslope=erry/sumX;
-    vel=1./slope*10000./25.;// micron/ns    
-    evel=eslope/slope/slope*10000./25.;// micron/ns
+    if(slope!=0){
+      vel=1./slope*10000./25.;// micron/ns    
+      evel=eslope/slope/slope*10000./25.;// micron/ns
+    }
   }
   if(vel>fMaxDriftVel||vel<fMinDriftVel){ 
     vel=0.;
@@ -294,7 +298,30 @@ Int_t AliITSOnlineSDDInjectors::GetAnodeNumber(Int_t iInjLine) const{
   }
   return ian;
 }
-
+//______________________________________________________________________
+Int_t AliITSOnlineSDDInjectors::GetLineNumberFromAnode(Int_t nAnode) const{
+  //
+  Int_t iLine=-1;
+  if(!fSide){
+    if(nAnode%8==0) iLine=nAnode/8;
+    if(nAnode==255) iLine=32;
+  }else{
+    if(nAnode%8==7) iLine=1+nAnode/8;
+    if(nAnode==0) iLine=0;
+  }
+  if(nAnode>=256) iLine=-1;
+  return iLine;
+}
+//______________________________________________________________________
+Int_t AliITSOnlineSDDInjectors::GetAnodeStatus(Int_t nAnode) const{
+  //
+  Int_t iii=GetLineNumberFromAnode(nAnode);
+  Int_t istatus=0;
+  if(iii>=0){
+    for(Int_t ninj=0;ninj<3;ninj++) istatus+=fGoodInj[iii][ninj]<<ninj;
+  }
+  return istatus;
+}
 //______________________________________________________________________
 void AliITSOnlineSDDInjectors::FindGoodInjectors(){
   // 
@@ -390,7 +417,7 @@ void AliITSOnlineSDDInjectors::PrintCentroids(){
 void AliITSOnlineSDDInjectors::WriteToASCII(Int_t evNumb, UInt_t timeStamp, Int_t optAppend){
   //
   Char_t outfilnam[100];
-  sprintf(outfilnam,"SDDinj_mod%03d_sid%d.data",fModuleId,fSide);
+  sprintf(outfilnam,"SDDinj_ddl%02dc%02d_sid%d.data",fDDL,fCarlos,fSide);  
   FILE* outf;
   if(optAppend==0){ 
     outf=fopen(outfilnam,"w");