Improvements of the code.
authorkowal2 <kowal2@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jan 2002 17:16:00 +0000 (17:16 +0000)
committerkowal2 <kowal2@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Jan 2002 17:16:00 +0000 (17:16 +0000)
TPC/AliTPCDigitizer.cxx
TPC/AliTPCDigitizer.h

index 7d54fa9..5e5f45c 100644 (file)
@@ -37,6 +37,7 @@ ClassImp(AliTPCDigitizer)
 AliTPCDigitizer::AliTPCDigitizer() :AliDigitizer()
 {
 // Default ctor - don't use it
+  fDebug =0;
 }
 
 //___________________________________________
@@ -44,6 +45,7 @@ AliTPCDigitizer::AliTPCDigitizer(AliRunDigitizer* manager)
     :AliDigitizer(manager)
 {
 // ctor which should be used
+  fDebug =0;
   if (GetDebug()>2) 
     cerr<<"AliTPCDigitizer::AliTPCDigitizer"
        <<"(AliRunDigitizer* manager) was processed"<<endl;
@@ -68,6 +70,11 @@ Bool_t AliTPCDigitizer::Init()
 
 //------------------------------------------------------------------------
 void AliTPCDigitizer::Exec(Option_t* option)
+{
+  ExecFast(option);  
+}
+//------------------------------------------------------------------------
+void AliTPCDigitizer::ExecFast(Option_t* option)
 {
   
   // merge input tree's with summable digits
@@ -82,7 +89,6 @@ void AliTPCDigitizer::Exec(Option_t* option)
   AliTPC *pTPC  = (AliTPC *) gAlice->GetModule("TPC");
   AliTPCParam * param = pTPC->GetParam();
   pTPC->GenerNoise(500000); //create teble with noise
-  printf("noise %f \n",  param->GetNoise()*param->GetNoiseNormFac());
   //
   Int_t nInputs = fManager->GetNinputs();
   Int_t * masks = new Int_t[nInputs];
@@ -92,11 +98,14 @@ void AliTPCDigitizer::Exec(Option_t* option)
   Int_t **ptr=  new Int_t*[nInputs];       //pointers to teh expanded tracks array
 
   //create digits array for given sectors
+  // make indexes
   AliSimDigits ** digarr = new AliSimDigits*[nInputs]; 
   for (Int_t i1=0;i1<nInputs; i1++){
     digarr[i1]=0;
     //    intree[i1]
     TTree * treear =  fManager->GetInputTreeTPCS(i1);
+    if (treear->GetIndex()==0) 
+      treear->BuildIndex("fSegmentID","fSegmentID");
     if (!treear) {      
       cerr<<" TPC -  not existing input = \n"<<i1<<" ";      
     }
@@ -108,26 +117,29 @@ void AliTPCDigitizer::Exec(Option_t* option)
   //create branch's in TPC treeD
   AliSimDigits * digrow = new AliSimDigits;
   TTree * tree  = fManager->GetTreeDTPC();
-  //if (tree->GetBranch("Segment") ) tree->GetBranch("Segment")->SetAddress(&digrow);
-  //else
   tree->Branch("Segment","AliSimDigits",&digrow);
   //
 
   param->SetZeroSup(2);
 
-  Int_t zerosup = param->GetZeroSup();
+  Int_t zerosup = param->GetZeroSup(); 
+  //
   //Loop over segments of the TPC
     
   for (Int_t n=0; n<nentries; n++) {
   //    for (Int_t n=0; n<300; n++) {
+    fManager->GetInputTreeTPCS(0)->GetEvent(n);      
+    digarr[0]->ExpandBuffer();
+    digarr[0]->ExpandTrackBuffer();
            
-    for (Int_t i=0;i<nInputs; i++){ 
-      fManager->GetInputTreeTPCS(i)->GetEvent(n);      
+    for (Int_t i=1;i<nInputs; i++){ 
+      fManager->GetInputTreeTPCS(i)->GetEntryWithIndex(digarr[0]->GetID(),digarr[0]->GetID());
+      if ((digarr[0]->GetID()-digarr[i]->GetID())>0) 
+       printf("problem - not corresponding segment in background event\n");
+      
       digarr[i]->ExpandBuffer();
       digarr[i]->ExpandTrackBuffer();
     }   
-    if ((digarr[0]->GetID()-digarr[1]->GetID())>0) 
-      printf("problem\n");
     Int_t sec, row;
     if (!param->AdjustSectorRow(digarr[0]->GetID(),sec,row)) {
       cerr<<"AliTPC warning: invalid segment ID ! "<<digarr[0]->GetID()<<endl;
@@ -145,7 +157,8 @@ void AliTPCDigitizer::Exec(Option_t* option)
     Int_t label[1000]; //stack for 300 events 
     Int_t labptr = 0;
 
-    
+    Int_t nElems = nrows*ncols;     
     for (Int_t i=0;i<nInputs; i++){ 
       pdig[i] = digarr[i]->GetDigits();
       ptr[i]  = digarr[i]->GetTracks();
@@ -153,11 +166,12 @@ void AliTPCDigitizer::Exec(Option_t* option)
     Short_t *pdig1= digrow->GetDigits();
     Int_t   *ptr1= digrow->GetTracks() ;
 
-    Int_t nElems = nrows*ncols;      
+    
 
     //    for (Int_t rows=0;rows<nrows; rows++){
     //  for (Int_t col=0;col<ncols; col++){
-    for (Int_t elem=0;elem<nElems; elem++){
+    for (Int_t elem=0;elem<nElems; elem++){    
+      //for (Int_t elem=nElems;elem<nElems; elem++){
 
        q=0;
        labptr=0;
@@ -169,7 +183,7 @@ void AliTPCDigitizer::Exec(Option_t* option)
           for (Int_t tr=0;tr<3;tr++) {
            //             Int_t lab = digarr[i]->GetTrackIDFast(rows,col,tr);
            Int_t lab = ptr[i][tr*nElems];
-            if ( lab > 1) {
+            if ( (lab > 1) && *(pdig[i])>zerosup) {
               label[labptr]=lab+masks[i];
               labptr++;
             }     
@@ -190,7 +204,7 @@ void AliTPCDigitizer::Exec(Option_t* option)
          *pdig1 =Short_t(q);
          for (Int_t tr=0;tr<3;tr++){
            if (tr<labptr) 
-             //  ((AliSimDigits*)digrow)->SetTrackIDFast(label[tr],rows,col,tr);
+             // ((AliSimDigits*)digrow)->SetTrackIDFast(label[tr],rows,col,tr);
              ptr1[tr*nElems] = label[tr];
            //else
              //            ((AliSimDigits*)digrow)->SetTrackIDFast(-1,rows,col,tr);          
@@ -205,7 +219,7 @@ void AliTPCDigitizer::Exec(Option_t* option)
     digrow->CompresTrackBuffer(1);
     tree->Fill();
     if (fDebug>0) cerr<<sec<<"\t"<<row<<"\n";  
-  }
+  } 
   fManager->GetTreeDTPC()->Write(0,TObject::kOverwrite);
   delete digrow;     
   for (Int_t i1=0;i1<nInputs; i1++) delete digarr[i1];
@@ -213,3 +227,160 @@ void AliTPCDigitizer::Exec(Option_t* option)
   delete digarr;  
 }
 
+
+
+//------------------------------------------------------------------------
+void AliTPCDigitizer::ExecSave(Option_t* option)
+{
+  
+  // merge input tree's with summable digits
+  //output stored in TreeTPCD
+
+  TString optionString = option;
+  if (optionString.Data() == "deb") {
+    cout<<"AliTPCDigitizer::Exec: called with option deb "<<endl;
+    fDebug = 3;
+  }
+  //get detector and geometry 
+  printf("TPC merging -1  -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+  AliTPC *pTPC  = (AliTPC *) gAlice->GetModule("TPC");
+  AliTPCParam * param = pTPC->GetParam();
+  pTPC->GenerNoise(500000); //create teble with noise
+  printf("noise %f \n",  param->GetNoise()*param->GetNoiseNormFac());
+  //
+  Int_t nInputs = fManager->GetNinputs();
+  Int_t * masks = new Int_t[nInputs];
+  for (Int_t i=0; i<nInputs;i++)
+    masks[i]= fManager->GetMask(i);
+  //  Short_t **pdig= new Short_t*[nInputs];   //pointers to the expanded digits array
+  //Int_t **ptr=  new Int_t*[nInputs];       //pointers to teh expanded tracks array
+
+  //create digits array for given sectors
+  // make indexes
+   printf("TPC merging -2  -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+  AliSimDigits ** digarr = new AliSimDigits*[nInputs]; 
+  for (Int_t i1=0;i1<nInputs; i1++){
+    digarr[i1]=0;
+    //    intree[i1]
+    TTree * treear =  fManager->GetInputTreeTPCS(i1);
+    printf("TPC merging -2.7  -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+    TBranch * br = treear->GetBranch("fSegmentID");
+    if (br) br->GetFile()->cd();
+    printf("TPC merging -2.75  -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+    //treear->BuildIndex("fSegmentID","fSegmentID");
+    if (!treear) {      
+      cerr<<" TPC -  not existing input = \n"<<i1<<" ";      
+    } 
+    printf("TPC merging -2.8  -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+    treear->GetBranch("Segment")->SetAddress(&digarr[i1]);
+     printf("TPC merging -2.9  -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+  }
+  Stat_t nentries = fManager->GetInputTreeTPCS(0)->GetEntries();
+  
+
+  //create branch's in TPC treeD
+  AliSimDigits * digrow = new AliSimDigits;
+  TTree * tree  = fManager->GetTreeDTPC();
+  //if (tree->GetBranch("Segment") ) tree->GetBranch("Segment")->SetAddress(&digrow);
+  //else
+  tree->Branch("Segment","AliSimDigits",&digrow);
+  //
+ printf("TPC merging -3  -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+  param->SetZeroSup(2);
+
+  Int_t zerosup = param->GetZeroSup();
+  //Loop over segments of the TPC
+    
+  for (Int_t n=0; n<nentries; n++) {
+  //    for (Int_t n=0; n<300; n++) {
+    fManager->GetInputTreeTPCS(0)->GetEvent(n);      
+    digarr[0]->ExpandBuffer();
+    digarr[0]->ExpandTrackBuffer();
+           
+    for (Int_t i=1;i<nInputs; i++){ 
+      fManager->GetInputTreeTPCS(i)->GetEntryWithIndex(digarr[0]->GetID(),digarr[0]->GetID());      
+      //fManager->GetInputTreeTPCS(i)->GetEntryWithIndex(digarr[0]->GetID(),1);      
+      digarr[i]->ExpandBuffer();
+      digarr[i]->ExpandTrackBuffer();
+      if ((digarr[0]->GetID()-digarr[i]->GetID())>0) 
+       printf("problem\n");
+    
+    }   
+    
+    Int_t sec, row;
+    if (!param->AdjustSectorRow(digarr[0]->GetID(),sec,row)) {
+      cerr<<"AliTPC warning: invalid segment ID ! "<<digarr[0]->GetID()<<endl;
+      continue;
+    }
+
+    digrow->SetID(digarr[0]->GetID());
+
+    Int_t nrows = digarr[0]->GetNRows();
+    Int_t ncols = digarr[0]->GetNCols();
+    digrow->Allocate(nrows,ncols);
+    digrow->AllocateTrack(3);
+
+    Float_t q=0;
+    Int_t label[1000]; //stack for 300 events 
+    Int_t labptr = 0;
+
+    
+
+    for (Int_t rows=0;rows<nrows; rows++){
+      for (Int_t col=0;col<ncols; col++){
+    
+       q=0;
+       labptr=0;
+       // looop over digits 
+        for (Int_t i=0;i<nInputs; i++){ 
+         q  += digarr[i]->GetDigitFast(rows,col);
+          //q  += *(pdig[i]);
+         
+          for (Int_t tr=0;tr<3;tr++) {
+           Int_t lab = digarr[i]->GetTrackIDFast(rows,col,tr);
+           //Int_t lab = ptr[i][tr*nElems];
+            if ( (lab > 1) ) {
+              label[labptr]=lab+masks[i];
+              labptr++;
+            }     
+          }
+         // pdig[i]++;
+         //ptr[i]++;
+         
+        }
+       q/=16.;  //conversion factor
+       //      Float_t noise  = gRandom->Gaus(0,param->GetNoise()*param->GetNoiseNormFac());  
+       Float_t noise  = pTPC->GetNoise();
+       q+=noise;
+        q=TMath::Nint(q);
+        if (q > zerosup){ 
+         
+         if(q > param->GetADCSat()) q = (Short_t)(param->GetADCSat());
+         digrow->SetDigitFast((Short_t)q,rows,col);  
+         // *pdig1 =Short_t(q);
+         for (Int_t tr=0;tr<3;tr++){
+           if (tr<labptr) 
+             ((AliSimDigits*)digrow)->SetTrackIDFast(label[tr],rows,col,tr);
+           //ptr1[tr*nElems] = label[tr];
+           //else
+             //            ((AliSimDigits*)digrow)->SetTrackIDFast(-1,rows,col,tr);          
+           //  ptr1[tr*nElems] = 1;
+         }
+       }
+       //pdig1++;
+       //ptr1++;
+    }
+    }
+    
+    digrow->CompresBuffer(1,zerosup);
+    digrow->CompresTrackBuffer(1);
+    tree->Fill();
+    if (fDebug>0) cerr<<sec<<"\t"<<row<<"\n";  
+  } 
+  printf("end TPC merging - end -Tree %s\t%p\n",fManager->GetInputTreeH(0)->GetName(),fManager->GetInputTreeH(0)->GetListOfBranches()->At(3));
+  fManager->GetTreeDTPC()->Write(0,TObject::kOverwrite);
+  delete digrow;     
+  for (Int_t i1=0;i1<nInputs; i1++) delete digarr[i1];
+  delete []masks;
+  delete digarr;  
+}
index 9933989..3b07800 100644 (file)
@@ -18,10 +18,12 @@ class AliTPCDigitizer : public AliDigitizer {
     virtual void Exec(Option_t* option=0);    
     Int_t GetDebug() const {return fDebug;}       // get debug level
     void SetDebug(Int_t level){fDebug = level;}   // set debug level        
- private:    
+ private: 
+    void ExecFast(Option_t* option=0); //digitize - using row pointers
+    void ExecSave(Option_t* option=0); // digitize using controlled arrays   
     Int_t fDebug;
  private:
-    ClassDef(AliTPCDigitizer,1)  // MUON merging/digitization
+    ClassDef(AliTPCDigitizer,2)  // MUON merging/digitization
 };    
 #endif