// //
///////////////////////////////////////////////////////////////////////////////
-#include <Riostream.h>
-
-#include <TFile.h>
-#include <TGeometry.h>
-#include <TMath.h>
-#include <TNode.h>
-#include <TParticle.h>
-#include <TRandom.h>
-#include <TTUBE.h>
-#include <TVirtualMC.h>
-#include <AliESD.h>
+#include "TClonesArray.h"
+#include "TString.h"
+#include "AliLoader.h"
+#include "AliLog.h"
#include "AliLog.h"
#include "AliMC.h"
-#include "AliLoader.h"
#include "AliRun.h"
-#include "TClonesArray.h"
#include "AliT0.h"
-#include "AliT0Loader.h"
-#include "AliT0digit.h"
-#include "AliT0hit.h"
#include "AliT0Digitizer.h"
#include "AliT0RawData.h"
#include "AliT0RecPoint.h"
-#include "AliLog.h"
-
+#include "AliT0digit.h"
+#include "AliT0hit.h"
ClassImp(AliT0)
//static AliT0digit *digits;
//_____________________________________________________________________________
AliT0::~AliT0() {
+ //destructor
if (fHits) {
fHits->Delete();
delete fHits;
//_____________________________________________________________________________
void AliT0::AddDigit(Int_t besttimeright, Int_t besttimeleft, Int_t meantime,
- Int_t timediff, Int_t sumMult,
- TArrayI *time, TArrayI *adc, TArrayI *timeAmp, TArrayI *adcAmp)
+ Int_t timediff, Int_t sumMult, Int_t refpoint,
+ TArrayI *timeCFD, TArrayI *qt0, TArrayI *timeLED, TArrayI *qt1)
{
// Add a T0 digit to the list.
if (!fDigits) {
fDigits = new AliT0digit();
}
- fDigits-> SetTimeBestRight(besttimeright);
- fDigits->SetTimeBestLeft(besttimeleft);
+ fDigits-> SetTimeBestA(besttimeright);
+ fDigits->SetTimeBestC(besttimeleft);
fDigits-> SetMeanTime(meantime);
fDigits-> SetDiffTime(timediff);
fDigits-> SetSumMult(sumMult);
- fDigits->SetTime(*time);
- fDigits->SetTimeAmp(*timeAmp);
- fDigits->SetADC(*adc);
- fDigits->SetADCAmp(*adcAmp);
+ fDigits->SetTimeCFD(*timeCFD);
+ fDigits->SetTimeLED(*timeLED);
+ fDigits->SetQT0(*qt0);
+ fDigits->SetQT1(*qt1);
+ fDigits->SetRefPoint(refpoint);
}
-
-//_____________________________________________________________________________
-void AliT0::BuildGeometry()
-{
- //
- // Build simple ROOT TNode geometry for event display
- //
- TNode *node, *top;
- const int kColorT0 = 19;
-
- top=gAlice->GetGeometry()->GetNode("alice");
-
- // T0 define the different volumes
- new TRotMatrix("rotx999","rot999", 90,0,90,90,180,0);
-
- new TTUBE("S_0ST1","T0 volume 1","void",5.,10.7,5.3);
- top->cd();
- node = new TNode("0ST1","0ST01","S_0ST1",0,0,-69.7,"");
- node->SetLineColor(kColorT0);
- fNodes->Add(node);
-
- new TTUBE("S_0ST2","T0 volume 2","void",5.,10.7,5.3);
- top->cd();
- node = new TNode("0ST2","0ST2","S_0ST2",0,0,350,"rotx999");
- node->SetLineColor(kColorT0);
- fNodes->Add(node);
-}
-
-//_____________________________________________________________________________
-Int_t AliT0::DistanceToPrimitive(Int_t /*px*/, Int_t /*py*/)
-{
- //
- // Calculate the distance from the mouse to the T0 on the screen
- // Dummy routine
- //
- return 9999;
-}
-
//-------------------------------------------------------------------------
void AliT0::Init()
{
//
// R Make a branch of AliT0RecPoints
//
- char branchname[20];
- sprintf(branchname,"%s",GetName());
+ // char branchname[20];
+ // sprintf(branchname,"%s",GetName());
+ // strncpy(branchname, GetName(), 20);
+ TString branchname = Form("%s", GetName());
const char *cH = strstr(option,"H");
const char *cD = strstr(option,"D");
const char *cR = strstr(option,"R");
+ const char *cS = strstr(option,"S");
if (cH && fLoader->TreeH())
{
if (fDigits == 0x0) fDigits = new AliT0digit();
// MakeBranchInTree(fLoader->TreeD(), branchname,
// &fDigits, 405, 0);
- fLoader->TreeD()->Branch(branchname,"AliT0digit",&fDigits,405,1);
+ fLoader->TreeD()->Branch(branchname.Data(),"AliT0digit",&fDigits);
// fLoader->TreeD()->Print();
}
if (cR && fLoader->TreeR())
{
if (fRecPoints == 0x0) fRecPoints = new AliT0RecPoint();
- MakeBranchInTree(fLoader->TreeR(), branchname,
- &fRecPoints, 405, 0);
+ MakeBranchInTree(fLoader->TreeR(), branchname, &fRecPoints);
+ }
+ if (cS && fLoader->TreeS())
+ {
+ if (fDigits == 0x0) fDigits = new AliT0digit();
+ // MakeBranchInTree(fLoader->TreeD(), branchname,
+ // &fDigits, 405, 0);
+ fLoader->TreeS()->Branch(branchname,"AliT0digit",&fDigits);
+ // fLoader->TreeD()->Print();
}
}
//_____________________________________________________________________________
void AliT0::ResetHits()
{
+ //
+ //reset hits
+ //
AliDetector::ResetHits();
}
void AliT0::SetTreeAddress()
{
- TTree *treeH;
- treeH = TreeH();
+ TTree *treeH = fLoader->TreeH();
if (treeH)
{
TBranch* branch = treeR->GetBranch ("T0");
if (branch) branch->SetAddress(&fRecPoints);
}
+ // SDigitizer for Federico
+ TTree *treeS = fLoader->TreeS();
+ if (treeS) {
+ if (fDigits == 0x0) fDigits = new AliT0digit();
+ TBranch* branch = treeS->GetBranch ("T0");
+ if (branch) branch->SetAddress(&fDigits);
+ }
}
// Create TreeD branches for the FMD
//
const Int_t kBufferSize = 4000;
- char branchname[20];
- sprintf(branchname,"%s",GetName());
+ // char branchname[20];
+ // strncpy(branchname, GetName(), 20);
+ TString branchname = Form("%s", GetName());
+ // sprintf(branchname,"%s",GetName());
if(treeD)
{
- MakeBranchInTree(treeD, branchname,&fDigits, kBufferSize, file);
+ MakeBranchInTree(treeD, branchname.Data(),&fDigits, kBufferSize, file);
}
}
//_____________________________________________________________________________
-AliDigitizer* AliT0::CreateDigitizer(AliRunDigitizer* manager) const
+AliDigitizer* AliT0::CreateDigitizer(AliDigitizationInput* digInput) const
{
- return new AliT0Digitizer(manager);
+ return new AliT0Digitizer(digInput);
}
//____________________________________________________________________________
void AliT0::Digits2Raw()
fLoader->UnloadDigits();
}
+
+//____________________________________________________________________________
+void AliT0::Raw2Digits(AliRawReader *rawReader,TTree* digitsTree)
+{
+
+ //T0 raw data-> digits conversion
+ // reconstruct time information from raw data
+ // cout<<" AliT0::Raw2Digits(AliRawReader *rawReader,TTree* digitsTree) "<<
+ // rawReader<<" "<<digitsTree<<endl;
+
+
+ // AliT0RawReader myrawreader(rawReader,digitsTree);
+ AliT0RawReader myrawreader(rawReader);
+ if (!myrawreader.Next())
+ AliDebug(1,Form(" no raw data found!! %i", myrawreader.Next()));
+ Int_t allData[110][5];
+ for (Int_t i=0; i<110; i++) {
+ allData[i][0]=myrawreader.GetData(i,0);
+ }
+
+
+ fDigits = new AliT0digit();
+ digitsTree->Branch("T0","AliT0digit",&fDigits);
+
+
+ TArrayI *timeLED = new TArrayI(24);
+ TArrayI * timeCFD = new TArrayI(24);
+ TArrayI *chargeQT0 = new TArrayI(24);
+ TArrayI *chargeQT1 = new TArrayI(24);
+
+ for (Int_t in=0; in<24; in++)
+ {
+ timeLED->AddAt(allData[in+1][0],in);
+ timeCFD->AddAt(allData[in+25][0],in);
+ chargeQT0->AddAt(allData[in+55][0],in);
+ chargeQT1->AddAt(allData[in+79][0],in);
+ AliDebug(2, Form(" readed Raw %i %i %i %i %i", in, timeLED->At(in),timeCFD->At(in),chargeQT0->At(in),chargeQT1->At(in)));
+ }
+
+ fDigits->SetTimeCFD(*timeCFD);
+ fDigits->SetQT0(*chargeQT1);
+
+ fDigits->SetTimeLED(*timeLED);
+ fDigits->SetQT1(*chargeQT1);
+
+ fDigits->SetMeanTime(allData[49][0]);
+ fDigits->SetDiffTime(allData[50][0]);
+ fDigits->SetTimeBestA(allData[51][0]);
+ fDigits->SetTimeBestC(allData[52][0]);
+ digitsTree->Fill();
+ fDigits->Write();
+
+ delete timeCFD ;
+ delete chargeQT0;
+ delete timeLED ;
+ delete chargeQT1;
+
+
+}