]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - T0/AliT0Reconstructor.cxx
Bug fix for merging (A Hansen)
[u/mrichter/AliRoot.git] / T0 / AliT0Reconstructor.cxx
index 337f0eef0b8754cbe17c58abd80a62fc6d296e6f..f2ecce0c6eb10aeedf64e626c3729003769924c5 100644 (file)
@@ -31,6 +31,7 @@
 #include "AliT0Parameters.h"
 #include "AliT0Calibrator.h"
 #include "AliESDfriend.h"
+#include "AliESDTZERO.h"
 #include "AliESDTZEROfriend.h"
 #include "AliLog.h"
 #include "AliCDBEntry.h" 
@@ -63,7 +64,8 @@ ClassImp(AliT0Reconstructor)
                                             fGRPdelays(0),
                                             fTimeMeanShift(0x0),
                                             fTimeSigmaShift(0x0),
-                                             fESDTZEROfriend(NULL)
+                                             fESDTZEROfriend(NULL),
+                                             fESDTZERO(NULL)
 
 {
   for (Int_t i=0; i<24; i++)  fTime0vertex[i] =0;
@@ -105,7 +107,7 @@ ClassImp(AliT0Reconstructor)
          TGraph* gr2 = fParam ->GetQTC(i);
          if (gr2) fQTC.AddAtAndExpand(gr2,i) ;         
          fTime0vertex[i] = fParam->GetCFD(i);
-         printf("OCDB mean CFD time %i %f \n",i, fTime0vertex[i]);
+         AliDebug(2,Form("OCDB mean CFD time %i %f \n",i, fTime0vertex[i]));
  }
   fLatencyL1 = fParam->GetLatencyL1();
   fLatencyL1A = fParam->GetLatencyL1A(); 
@@ -114,19 +116,18 @@ ClassImp(AliT0Reconstructor)
   AliDebug(2,Form(" LatencyL1 %f latencyL1A %f latencyL1C %f latencyHPTDC %f \n",fLatencyL1, fLatencyL1A, fLatencyL1C, fLatencyHPTDC));
  
   for (Int_t i=0; i<24; i++) {
-    if( fTime0vertex[i] < 500 ) fTime0vertex[i] =( 1000.*fLatencyHPTDC - 1000.*fLatencyL1 + 1000.*fGRPdelays)/24.4;
+    if( fTime0vertex[i] < 500 || fTime0vertex[i] > 50000) fTime0vertex[i] =( 1000.*fLatencyHPTDC - 1000.*fLatencyL1 + 1000.*fGRPdelays)/24.4;
  
   }
-  
-  // fdZonC = TMath::Abs(fParam->GetZPositionShift("T0/C/PMT1"));
-  //fdZonA = TMath::Abs(fParam->GetZPositionShift("T0/A/PMT15"));
   //here real Z position
   fdZonC = TMath::Abs(fParam->GetZPosition("T0/C/PMT1"));
   fdZonA = TMath::Abs(fParam->GetZPosition("T0/A/PMT15"));
 
   fCalib = new AliT0Calibrator();
   fESDTZEROfriend = new AliESDTZEROfriend();
+  fESDTZERO  = new AliESDTZERO();
 
 }
 
 //_____________________________________________________________________________
@@ -198,8 +199,12 @@ void AliT0Reconstructor::Reconstruct(TTree*digitsTree, TTree*clustersTree) const
       AliDebug(5,Form(" ipmt %i QTC %i , time in chann %i (led-cfd) %i ",
                       ipmt, Int_t(adc[ipmt]) ,Int_t(time[ipmt]),Int_t( sl)));
 
-      Double_t ampMip =((TGraph*)fAmpLED.At(ipmt))->Eval(sl);
-      Double_t qtMip = ((TGraph*)fQTC.At(ipmt))->Eval(adc[ipmt]);
+      Double_t ampMip = 0;
+      TGraph* ampGraph = (TGraph*)fAmpLED.At(ipmt);
+      if (ampGraph) ampMip = ampGraph->Eval(sl);
+      Double_t qtMip = 0;
+      TGraph* qtGraph = (TGraph*)fQTC.At(ipmt);
+      if (qtGraph) qtMip = qtGraph->Eval(adc[ipmt]);
       AliDebug(5,Form("  Amlitude in MIPS LED %f ,  QTC %f in channels %f\n ",ampMip,qtMip, adc[ipmt]));
       
       frecpoints->SetTime(ipmt, Float_t(time[ipmt]) );
@@ -211,6 +216,8 @@ void AliT0Reconstructor::Reconstruct(TTree*digitsTree, TTree*clustersTree) const
     else {
       time[ipmt] = 0;
       adc[ipmt] = 0;
+      adcmip[ipmt] = 0;
+
     }
   }
   
@@ -276,17 +283,20 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
 {
   // T0 raw ->
   //
-  // reference amplitude and time ref. point from reco param
-
-  // Float_t refAmp = GetRecoParam()->GetRefAmp();
+  
+  Float_t meanOrA = fTime0vertex[0] + 587;
+  Float_t meanOrC = fTime0vertex[0] + 678;
+  Float_t meanTVDC = fTime0vertex[0] + 2564;
 
-  //  Int_t refPoint = 0;
   Int_t badpmt[24];
   //Bad channel
-  for (Int_t i=0; i<24; i++) 
-  badpmt[i] = GetRecoParam() -> GetBadChannels(i);
+  for (Int_t i=0; i<24; i++) {
+    badpmt[i] = GetRecoParam() -> GetBadChannels(i);
+  }
   Int_t low[500], high[500];
+  Float_t timefull=-9999;;
+  Float_t tvdc  = -9999; Float_t ora = -9999; Float_t orc = -9999;
 
   Int_t allData[110][5];
   
@@ -296,7 +306,6 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
   Float_t c = 29.9792458; // cm/ns
   Double32_t vertex = 9999999;
   Int_t onlineMean=0;
-  // Float_t meanVertex = fParam->GetMeanVertex();
   Float_t meanVertex = 0;
   for (Int_t i0=0; i0<24; i0++) {
     low[i0] = Int_t(fTime0vertex[i0]) - 200;
@@ -304,11 +313,7 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
   }
   
   for (Int_t i0=0; i0<110; i0++)
-    {
-      for (Int_t j0=0; j0<5; j0++) allData[i0][j0]=0; 
-      //    low[i0] = Int_t (GetRecoParam()->GetLow(i0));      
-      // high[i0] = Int_t (GetRecoParam()->GetHigh(i0));
-      }
+    for (Int_t j0=0; j0<5; j0++)  allData[i0][j0]=0; 
   
   Float_t lowAmpThreshold =  GetRecoParam()->GetAmpLowThreshold();  
   Float_t highAmpThreshold =  GetRecoParam()->GetAmpHighThreshold(); 
@@ -317,7 +322,8 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
   Double32_t besttimeC=9999999;
   Int_t pmtBestA=99999;
   Int_t pmtBestC=99999;
-   
+  Float_t channelWidth = fParam->GetChannelWidth() ;  
+       
   AliT0RecPoint* frecpoints= new AliT0RecPoint ();
   
   recTree->Branch( "T0", "AliT0RecPoint" ,&frecpoints);
@@ -347,14 +353,6 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
          }
        }
        Int_t ref=0;
-
-       //      if (refPoint>0) 
-       //  ref = allData[refPoint][0]-5000;
-
-       
-       Float_t channelWidth = fParam->GetChannelWidth() ;  
-       
-       //       Int_t meanT0 = fParam->GetMeanT0();
        
        for (Int_t in=0; in<12; in++)  
          {
@@ -398,20 +396,13 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
            chargeQT1[in]=allData[2*in+58][0];
            AliDebug(25, Form(" readed Raw %i %i %i",
                              in, chargeQT0[in],chargeQT1[in]));
-           
          }
        
-       for (Int_t iHit=0; iHit<5; iHit++) 
-         {
-             if(allData[49][iHit] > low[49] && 
-                allData[49][iHit] < high[49]){
-               onlineMean = allData[49][iHit];
-               break;
-             }
-         }
+       onlineMean = allData[49][0];
+       
        Double32_t time[24], adc[24], adcmip[24], noncalibtime[24];
        for (Int_t ipmt=0; ipmt<24; ipmt++) {
-         if(timeCFD[ipmt] >  0  && badpmt[ipmt]==0 ){
+         if(timeCFD[ipmt] >  0 /* && badpmt[ipmt]==0*/ ){
           //for simulated data
             //for physics  data
           if(( chargeQT0[ipmt] - chargeQT1[ipmt])>0)  {
@@ -426,8 +417,12 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
           // time[ipmt] = fCalib-> WalkCorrection( refAmp,ipmt, Int_t(sl), timeCFD[ipmt] ) ;
           AliDebug(5,Form(" ipmt %i QTC %i , time in chann %i (led-cfd) %i ",
                            ipmt, Int_t(adc[ipmt]) ,Int_t(time[ipmt]),Int_t( sl)));
-          Double_t ampMip =( (TGraph*)fAmpLED.At(ipmt))->Eval(sl);
-          Double_t qtMip = ((TGraph*)fQTC.At(ipmt))->Eval(adc[ipmt]);
+          Double_t ampMip = 0;
+          TGraph * ampGraph =  (TGraph*)fAmpLED.At(ipmt);
+          if (ampGraph) ampMip = ampGraph->Eval(sl);
+          Double_t qtMip = 0;
+          TGraph * qtGraph = (TGraph*)fQTC.At(ipmt);
+          if (qtGraph) qtMip = qtGraph->Eval(adc[ipmt]);
           AliDebug(10,Form("  Amlitude in MIPS LED %f ; QTC %f;  in channels %f\n ",ampMip,qtMip, adc[ipmt]));
           //bad peak removing
             frecpoints->SetTime(ipmt, Float_t(time[ipmt]) );
@@ -440,14 +435,16 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
         else {
           time[ipmt] = 0;
           adc[ipmt] = 0;
+          adcmip[ipmt] = 0;
           noncalibtime[ipmt] = 0;
         }
        }
        fESDTZEROfriend->SetT0timeCorr(noncalibtime) ;     
        for (Int_t ipmt=0; ipmt<12; ipmt++){
-        if(time[ipmt] !=0 && badpmt[ipmt]==0 &&  adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]<highAmpThreshold )
+        if(time[ipmt] !=0 /*&& badpmt[ipmt]==0 */&&  adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]<highAmpThreshold )
           {
-            if(TMath::Abs(time[ipmt])<TMath::Abs(besttimeC)){
+              // if(TMath::Abs(time[ipmt])<TMath::Abs(besttimeC)) {
+            if(time[ipmt]<besttimeC){
               besttimeC=time[ipmt]; //timeC
                  pmtBestC=ipmt;
             }
@@ -455,30 +452,31 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
        }
        for ( Int_t ipmt=12; ipmt<24; ipmt++)
         {
-          if(time[ipmt] != 0  && badpmt[ipmt]==0 && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]<highAmpThreshold)
+          if(time[ipmt] != 0 /* && badpmt[ipmt]==0*/ && adcmip[ipmt]>lowAmpThreshold && adcmip[ipmt]<highAmpThreshold)
             {
-              if(TMath::Abs(time[ipmt])<TMath::Abs(besttimeA)) {
+              if(time[ipmt]<besttimeA) {
+                //            if(TMath::Abs(time[ipmt])<TMath::Abs(besttimeA)) {
                 besttimeA=time[ipmt]; //timeA
                 pmtBestA=ipmt;
               }
             }
         }
        if(besttimeA < 999999) 
-        //      frecpoints->SetTimeBestA((besttimeA * channelWidth)- 1000.*fLatencyHPTDC + 1000.*fLatencyL1A - 1000.*fGRPdelays - fTimeMeanShift[1] ); 
-        frecpoints->SetTimeBestA((besttimeA * channelWidth- fTimeMeanShift[1])); 
+        frecpoints->SetTimeBestA((besttimeA * channelWidth)- 1000.*fLatencyHPTDC + 1000.*fLatencyL1A - 1000.*fGRPdelays - fTimeMeanShift[1] ); 
+       //       frecpoints->SetTimeBestA((besttimeA * channelWidth- fTimeMeanShift[1])); 
 
        if( besttimeC < 999999 ) 
-        //      frecpoints->SetTimeBestC((besttimeC * channelWidth)- 1000.*fLatencyHPTDC +1000.*fLatencyL1C - 1000.*fGRPdelays - fTimeMeanShift[2]);
-        frecpoints->SetTimeBestC((besttimeC * channelWidth - fTimeMeanShift[2]));
+        frecpoints->SetTimeBestC((besttimeC * channelWidth)- 1000.*fLatencyHPTDC +1000.*fLatencyL1C - 1000.*fGRPdelays - fTimeMeanShift[2]);
+       // frecpoints->SetTimeBestC((besttimeC * channelWidth - fTimeMeanShift[2]));
        AliDebug(5,Form(" pmtA %i besttimeA %f shift A %f ps, pmtC %i besttimeC %f shiftC %f ps",
                       pmtBestA,besttimeA, fTimeMeanShift[1],
                       pmtBestC,  besttimeC,fTimeMeanShift[2]));
         if(besttimeA <999999 && besttimeC < 999999 ){
          //     timeDiff = ( besttimeA - besttimeC)* 0.001* channelWidth + fLatencyL1A - fLatencyL1C;
-         // timeclock = channelWidth * Float_t( besttimeA+besttimeC)/2. - 1000.*fLatencyHPTDC + 1000.*fLatencyL1 - 1000.*fGRPdelays - fTimeMeanShift[0] ;  
+         timeclock = channelWidth * Float_t( besttimeA+besttimeC)/2. - 1000.*fLatencyHPTDC + 1000.*fLatencyL1 - 1000.*fGRPdelays - fTimeMeanShift[0] ;  
         meanTime = (besttimeA+besttimeC-2.*Float_t(ref))/2.;
         timeDiff = ( besttimeA - besttimeC)* 0.001* channelWidth ;
-        timeclock = channelWidth * Float_t( besttimeA+besttimeC)/2. - fTimeMeanShift[0] ;  
+        // timeclock = channelWidth * Float_t( besttimeA+besttimeC)/2. - fTimeMeanShift[0] ;  
         vertex =  meanVertex - c*(timeDiff)/2. ; //+ (fdZonA - fdZonC)/2; 
        }
       }  //if phys event       
@@ -493,21 +491,56 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
       Int_t trchan[5]= {50,51,52,55,56};
       for (Int_t i=0; i<5; i++) tr[i]=false; 
       for (Int_t itr=0; itr<5; itr++) {
-       for (Int_t iHit=0; iHit<5; iHit++) 
+       for (Int_t iHit=0; iHit<1; iHit++) 
          {
            Int_t trr=trchan[itr];
-           if( allData[trr][iHit] > 0) tr[itr]=true;
-         }
+           if( allData[trr][iHit] > 0)  tr[itr]=true;
+
+           AliDebug(1,Form("Reconstruct :::  T0 triggers iHit %i tvdc %d orA %d orC %d centr %d semicentral %d",iHit, tr[0],tr[1],tr[2],tr[3],tr[4]));
+         }       
       }
       frecpoints->SetT0Trig(tr);
-   
+      
+      for (Int_t iHit=0; iHit<5; iHit++) 
+       {
+         if(allData[50][iHit]>0) 
+           tvdc = (Float_t(allData[50][iHit]) - meanTVDC) * channelWidth* 0.001; 
+         if(allData[51][iHit]>0)
+           ora = (Float_t(allData[51][iHit]) - meanOrA) * channelWidth* 0.001;
+         
+         if(allData[52][iHit]>0) 
+           orc = (Float_t(allData[52][iHit]) - meanOrC) * channelWidth* 0.001;
+         
+         frecpoints->SetOrC( iHit, orc);
+         frecpoints->SetOrA( iHit, ora);
+         frecpoints->SetTVDC( iHit, tvdc);
+         for (Int_t i0=0; i0<12; i0++) {
+           timefull = -9999; 
+           if(allData[i0+1][iHit]>1) 
+             timefull = (Float_t(allData[i0+1][iHit])-fTime0vertex[i0])* channelWidth* 0.001;
+           frecpoints->SetTimeFull(i0, iHit,timefull) ;
+           //   printf("i0 %d iHit %d data %d fTime0vertex %f timefull %f \n",i0, iHit, allData[i0+1][iHit], fTime0vertex[i0], timefull);
+           
+         }
+         
+         for (Int_t i0=12; i0<24; i0++) {
+           timefull = -9999; 
+           if(allData[i0+45][iHit]>1) {
+             timefull = (Float_t(allData[i0+45][iHit])-fTime0vertex[i0])* channelWidth* 0.001;
+           }
+           //        printf("i0 %d iHit %d data %d fTime0vertex %f timefull %f \n",i0, iHit, allData[i0+45][iHit], fTime0vertex[i0], timefull);
+           frecpoints->SetTimeFull(i0, iHit, timefull) ;
+         }
+       }
+      
+      
       //Set MPD
       if(allData[53][0]>0 && allData[54][0]) 
        frecpoints->SetMultA(allData[53][0]-allData[54][0]);
-       if(allData[105][0]>0 && allData[106][0]) 
-         frecpoints->SetMultC(allData[105][0]-allData[106][0]);
-       
-       
+      if(allData[105][0]>0 && allData[106][0]) 
+       frecpoints->SetMultC(allData[105][0]-allData[106][0]);
+      
+      
     } // if (else )raw data
   recTree->Fill();
   if(frecpoints) delete frecpoints;
@@ -524,6 +557,10 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
   ****************************************************/
   
   AliDebug(1,Form("Start FillESD T0"));
+  if(!pESD) {
+    AliError("No ESD Event");
+    return;
+  }
   pESD ->SetT0spread(fTimeSigmaShift);
  
 
@@ -542,7 +579,6 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
     currentVertex = vertex->GetZ();
     
     ncont = vertex->GetNContributors();
-    //  cout<<"@@ spdver "<<spdver<<" ncont "<<ncont<<endl;
     if(ncont>0 ) {
       shift = currentVertex/c;
     }
@@ -588,24 +624,47 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
    }
   }
   Int_t trig= frecpoints ->GetT0Trig();
-  pESD->SetT0Trig(trig);
-  
-  pESD->SetT0zVertex(zPosition); //vertex Z position 
+  frecpoints->PrintTriggerSignals( trig);
+  printf(" FillESD trigger %i \n",trig);
+  fESDTZERO->SetT0Trig(trig);
+  //pESD->SetT0Trig(trig);
+  //  pESD->SetT0zVertex(zPosition); //vertex Z position 
+  fESDTZERO->SetT0zVertex(zPosition); //vertex Z position 
 
   Double32_t multA=frecpoints ->GetMultA();
   Double32_t multC=frecpoints ->GetMultC();
-  //  pESD->SetT0MultC(multC);        // multiplicity Cside 
-  //  pESD->SetT0MultA(multA);        // multiplicity Aside 
-  pESD->SetT0(multA); // for backward compatubility
-  pESD->SetT0clock(multC); // for backward compatubility
-
+  //  pESD->SetT0(multC);        // multiplicity Cside 
+  //  pESD->SetT0clock(multA);        // multiplicity Aside 
+  fESDTZERO->SetMultA(multA); // for backward compatubility
+  fESDTZERO->SetMultC(multC); // for backward compatubility
+
+
+  for (Int_t iHit =0; iHit<5; iHit++ ) {
+       AliDebug(1,Form("FillESD ::: iHit %i tvdc %f orA %f orC %f\n", iHit,
+          frecpoints->GetTVDC(iHit),
+          frecpoints->GetOrA(iHit),
+                      frecpoints->GetOrC(iHit) ));
+    fESDTZERO->SetTVDC(iHit,frecpoints->GetTVDC(iHit));
+    fESDTZERO->SetOrA(iHit,frecpoints->GetOrA(iHit));
+    fESDTZERO->SetOrC(iHit,frecpoints->GetOrC(iHit));
+    
+    for (Int_t i0=0; i0<24; i0++) {
+      //  if(frecpoints->GetTimeFull(i0,iHit)>0){
+      //       printf("FillESD ::: iHit %i cfd %i time %f \n", iHit, i0, frecpoints->GetTimeFull(i0,iHit));
+       fESDTZERO->SetTimeFull(i0, iHit,frecpoints->GetTimeFull(i0,iHit));
+       // }
+       
+    }               
+  }
   for(Int_t i=0; i<3; i++) 
-    pESD->SetT0TOF(i,timeClock[i]);   // interaction time (ns) 
-  pESD->SetT0time(time);         // best TOF on each PMT 
-  pESD->SetT0amplitude(ampQTC);     // number of particles(MIPs) on each PMT
+    fESDTZERO->SetT0TOF(i,timeClock[i]);   // interaction time (ns) 
+  fESDTZERO->SetT0time(time);         // best TOF on each PMT 
+  fESDTZERO->SetT0amplitude(ampQTC);     // number of particles(MIPs) on each PMT
   
   AliDebug(1,Form("T0: SPDshift %f Vertex %f (T0A+T0C)/2 %f #channels T0signal %f ns OrA %f ns OrC %f T0trig %i\n",shift, zPosition, timeStart, timeClock[0], timeClock[1], timeClock[2], trig));
+
   
+
   if (pESD) {
     
     AliESDfriend *fr = (AliESDfriend*)pESD->FindListObject("AliESDfriend");
@@ -625,8 +684,9 @@ void AliT0Reconstructor::Reconstruct(AliRawReader* rawReader, TTree*recTree) con
        fr->SetTZEROfriend(fESDTZEROfriend);
        //      }//
     }
+
+    pESD->SetTZEROData(fESDTZERO);
   }
-     
 
 
 } // vertex in 3 sigma