START reconstruction non-crashed version
[u/mrichter/AliRoot.git] / START / AliSTARTReconstructor.cxx
index 56bd73a6e6e86f060868dfca98f08cc647c74dbb..b52057ec8ca7e81654ae7441f03c18044e61d43b 100644 (file)
 
 #include "AliRunLoader.h"
 #include "AliRun.h"
 
 #include "AliRunLoader.h"
 #include "AliRun.h"
-#include "AliSTARTLoader.h"
-#include "AliSTARTdigit.h"
-#include "AliSTARTReconstructor.h"
 #include <AliESD.h>
 #include <AliESD.h>
+#include "AliLog.h"
 #include <TClonesArray.h>
 #include "AliSTARTRecPoint.h"
 #include "AliRawReader.h"
 #include "AliSTARTRawReader.h"
 #include <TClonesArray.h>
 #include "AliSTARTRecPoint.h"
 #include "AliRawReader.h"
 #include "AliSTARTRawReader.h"
-#include "AliLog.h"
+#include "AliSTARTLoader.h"
+#include "AliSTARTdigit.h"
+#include "AliSTARTReconstructor.h"
+#include "AliSTARTParameters.h"
+#include "AliSTARTAlignData.h"
+#include "AliSTARTCalibData.h"
+#include "AliCDBLocal.h"
+#include "AliCDBStorage.h"
+#include "AliCDBManager.h"
+#include "AliCDBEntry.h"
+
+#include <TArrayI.h>
+
 ClassImp(AliSTARTReconstructor)
 ClassImp(AliSTARTReconstructor)
+AliSTARTAlignData* AliSTARTReconstructor::fgAlignData = 0;
+AliSTARTCalibData* AliSTARTReconstructor::fgCalibData = 0;
 
   void  AliSTARTReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
 {
 
   void  AliSTARTReconstructor::ConvertDigits(AliRawReader* rawReader, TTree* digitsTree) const
 {
@@ -44,12 +56,34 @@ ClassImp(AliSTARTReconstructor)
 // START digits reconstruction
 // STARTRecPoint writing 
 
 // START digits reconstruction
 // STARTRecPoint writing 
 
+    //Q->T-> coefficients !!!! should be asked!!!
+  //  Float_t ph2MIP=500;
+  Float_t gain[24], timeDelayCFD[24], timeDelayLED[24];
+  Float_t zdetA,zdetC;
+  TObjArray slewingLED;
+    
+  TArrayI * fADC = new TArrayI(24); 
+  TArrayI * fTimeCFD = new TArrayI(24); 
+  TArrayI * fADCLED = new TArrayI(24); 
+  TArrayI * fTimeLED = new TArrayI(24); 
+  cout<<" fTimeCFD "<<fTimeCFD<<endl;
+
+  AliSTARTParameters* param = AliSTARTParameters::Instance();
+  param->Init();
+  Int_t ph2MIP = param->GetPh2Mip();     
+  Int_t channelWidth = param->GetChannelWidth() ;  
+  
+    for (Int_t i=0; i<24; i++){
+      timeDelayCFD[i] = param->GetTimeDelayCFD(i);
+      timeDelayLED[i] = param->GetTimeDelayLED(i);
+      gain[i] = param->GetGain(i);
+      slewingLED.AddAtAndExpand(param->GetSlew(i),i);
+     }
+    zdetC = param->GetZposition(0);
+    zdetA  = param->GetZposition(1);
+  
   AliDebug(1,Form("Start DIGITS reconstruction "));
   AliDebug(1,Form("Start DIGITS reconstruction "));
-   Int_t channelWigth=25; //ps
-  TArrayI* fSumMult = new TArrayI(6);
-  Float_t ph2mV = 150./500.;
-  Float_t mV2channel=200000/(25*25);  //5V -> 200ns
-
   TBranch *brDigits=digitsTree->GetBranch("START");
   AliSTARTdigit *fDigits = new AliSTARTdigit();
   if (brDigits) {
   TBranch *brDigits=digitsTree->GetBranch("START");
   AliSTARTdigit *fDigits = new AliSTARTdigit();
   if (brDigits) {
@@ -59,30 +93,50 @@ ClassImp(AliSTARTReconstructor)
     return;
   }
   brDigits->GetEntry(0);
     return;
   }
   brDigits->GetEntry(0);
-  Int_t besttimeright=channelWigth * (fDigits->BestTimeRight());
-  Int_t besttimeleft=channelWigth * (fDigits->BestTimeLeft());
+  fDigits->GetTime(*fTimeCFD);
+  fDigits->GetADC(*fADC);
+  fDigits->GetTimeAmp(*fTimeLED);
+  fDigits->GetADCAmp(*fADCLED);
 
 
+  Float_t time[24], adc[24];
+  for (Int_t ipmt=0; ipmt<24; ipmt++)
+    {
+      
+         if(fTimeCFD->At(ipmt)>0 ){
+        time[ipmt] = channelWidth *( fTimeCFD->At(ipmt)) - 1000*timeDelayCFD[ipmt];
+        cout<<ipmt<<" "<<time[ipmt];
+        Float_t adc_digPs = channelWidth * Float_t (fADC->At(ipmt)) ;
+        //      cout<<"  adc_digmV "<< adc_digPs<<endl;
+        adc[ipmt] = TMath::Exp(adc_digPs/1000) /gain[ipmt];
+        //      cout<<" adc"<<adc[ipmt]<<" inMIP "<<adc[ipmt]/50<< endl;
+         }
+    }
+
+  Int_t besttimeright=channelWidth * (fDigits->BestTimeRight());
+  Int_t besttimeleft=channelWidth * (fDigits->BestTimeLeft());
   //folding with experimental time distribution
   //  Float_t c = 29.9792; // cm/ns
   Float_t c = 0.0299792; // cm/ps
   //folding with experimental time distribution
   //  Float_t c = 29.9792; // cm/ns
   Float_t c = 0.0299792; // cm/ps
-  Float_t lenr=TMath::Sqrt(350*350 + 6.5*6.5);
-  Float_t lenl=TMath::Sqrt(69.7*69.7 + 6.5*6.5);
-  Float_t timeDiff=channelWigth * (fDigits->TimeDiff());
-  Int_t meanTime=channelWigth * (fDigits->MeanTime());
+  Float_t lenr=TMath::Sqrt(zdetA*zdetA + 6.5*6.5);
+  Float_t lenl=TMath::Sqrt(zdetC*zdetC + 6.5*6.5);
+  Float_t timeDiff=channelWidth * (fDigits->TimeDiff());
+  Int_t meanTime=channelWidth * (fDigits->MeanTime());
   Float_t ds=(c*(timeDiff)-(lenr-lenl))/2;
   AliDebug(2,Form(" timediff in ns %f  real point%f",timeDiff,ds));
   
   Float_t ds=(c*(timeDiff)-(lenr-lenl))/2;
   AliDebug(2,Form(" timediff in ns %f  real point%f",timeDiff,ds));
   
-
-  fDigits->Print();
+  /*
   fDigits->GetSumMult(*fSumMult);
   fDigits->GetSumMult(*fSumMult);
-  Int_t multipl[6]; 
- for (Int_t i=0; i<6; i++)
+  Int_t multipl[4]; 
+ for (Int_t i=0; i<4; i++)
     {
       Float_t  mult=Float_t (fSumMult->At(i));
       Float_t   realMultmV=TMath::Exp(mult/mV2channel);
       multipl[i]=Int_t ((realMultmV/ph2mV)/500+0.5);
     }
     {
       Float_t  mult=Float_t (fSumMult->At(i));
       Float_t   realMultmV=TMath::Exp(mult/mV2channel);
       multipl[i]=Int_t ((realMultmV/ph2mV)/500+0.5);
     }
-  AliDebug(2,Form(" multiplicity Abs side %i  multiplicity non-Abs side %i",multipl[1],multipl[2]));
+  */
+
+  //  AliDebug(2,Form(" multiplicity Abs side %i  multiplicity non-Abs side %i",multipl[1],multipl[2]));
 
   AliSTARTRecPoint* frecpoints= new AliSTARTRecPoint ();
   clustersTree->Branch( "START", "AliSTARTRecPoint" ,&frecpoints, 405,1);
 
   AliSTARTRecPoint* frecpoints= new AliSTARTRecPoint ();
   clustersTree->Branch( "START", "AliSTARTRecPoint" ,&frecpoints, 405,1);
@@ -90,10 +144,11 @@ ClassImp(AliSTARTReconstructor)
   frecpoints->SetTimeBestLeft(besttimeleft);
   frecpoints->SetVertex(ds);
   frecpoints->SetMeanTime(meanTime);
   frecpoints->SetTimeBestLeft(besttimeleft);
   frecpoints->SetVertex(ds);
   frecpoints->SetMeanTime(meanTime);
+  /*
   frecpoints->SetMult(multipl[0]);
   frecpoints->SetMultA(multipl[2]);
   frecpoints->SetMultC(multipl[1]);
   frecpoints->SetMult(multipl[0]);
   frecpoints->SetMultA(multipl[2]);
   frecpoints->SetMultC(multipl[1]);
-
+  */
   clustersTree->Fill();
 }
 
   clustersTree->Fill();
 }