Bug in Hit2Sdig fixed+minors
authordibari <dibari@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 11 Mar 2007 17:43:55 +0000 (17:43 +0000)
committerdibari <dibari@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 11 Mar 2007 17:43:55 +0000 (17:43 +0000)
HMPID/AliHMPIDDigit.h
HMPID/AliHMPIDHit.cxx
HMPID/AliHMPIDHit.h
HMPID/AliHMPIDParam.h
HMPID/AliHMPIDv1.cxx
HMPID/Hdisp.C
HMPID/Hmenu.C

index fef2fcb..b1fadfa 100644 (file)
@@ -51,7 +51,8 @@ public:
          Float_t Q           (                               )const{return fQ;}                                                        //charge, [QDC]
   inline void    Raw         (UInt_t &w32,Int_t &ddl,Int_t &r,Int_t &d,Int_t &a)const;                                                 //digit->(w32,ddl,r,d,a)
   inline void    Raw         (UInt_t  w32,Int_t  ddl         );                                                                        //(w32,ddl)->digit
-  inline Bool_t  Set         (Int_t c,Int_t p,Int_t x,Int_t y,Float_t q=0,Int_t tid=0);                                                //manual creation 
+  inline Bool_t  Set         (Int_t c,Int_t p,Int_t x,Int_t y,Int_t tid=0);                                                            //manual creation 
+         void    SetQ        (Float_t q                      )     {fQ=q;}                                                             //manual creation 
   static void    WriteRaw    (TObjArray *pDigLst             );                                                                        //write as raw stream     
   
   static Float_t SizeAllX    (                               )     {return fMaxPcX[5];}                                                //all PCs size x, [cm]        
@@ -180,15 +181,16 @@ void AliHMPIDDigit::Raw(UInt_t w32,Int_t ddl)
   fPad=Abs(ch,pc,px,py);fQ=q;
 }
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-Bool_t AliHMPIDDigit::Set(Int_t ch,Int_t pc,Int_t px,Int_t py,Float_t qdc,Int_t tid)
+Bool_t AliHMPIDDigit::Set(Int_t ch,Int_t pc,Int_t px,Int_t py,Int_t tid)
 {
 // Manual creation of digit
 // Arguments: ch,pc,px,py,qdc,tid  
-//   Returns: none  
+//   Returns: kTRUE if wrong digit
   if(px<kMinPx || px>kMaxPx) return kTRUE;
   if(py<kMinPy || py>kMaxPy) return kTRUE;
 
-  fPad=Abs(ch,pc,px,py);fQ=qdc;fTracks[0]=tid;
+  fPad=Abs(ch,pc,px,py);fTracks[0]=tid;
+  fQ=0;
   return kFALSE;
 }
 #endif
index d470339..d1c2989 100644 (file)
@@ -45,7 +45,8 @@ void AliHMPIDHit::Hit2Sdi(TClonesArray *pSdiLst,Int_t iHow)const
 
   for(Int_t i=-iHow;i<=iHow;i++){                            //horizontal loop
     for(Int_t j=-iHow;j<=iHow;j++){                          //vertical loop
-      if(dig.Set(fCh,pc,px+i,py+j,fQ*dig.IntMathieson(fLx,fLy),fTrack)) continue;
+      if(dig.Set(fCh,pc,px+i,py+j,fTrack)) continue;
+      dig.SetQ(fQ*dig.IntMathieson(fLx,fLy));
       new((*pSdiLst)[iSdiCnt++]) AliHMPIDDigit(dig);
     }
   }
index c17a219..225a45a 100644 (file)
@@ -12,8 +12,8 @@ class AliHMPIDHit : public AliHit //   TObject-AliHit-AliHMPIDHit
 {
 public:
   AliHMPIDHit(                                                                           ):AliHit(     ),fCh(-1),fPid(-1 ),fQ(-1),fLx(0),fLy(0){} //default ctor
-  AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y,const TVector3 &p):AliHit(0,tid),fCh(c ),fPid(pid),fQ(0 ),fLx(x),fLy(y){QdcTot(e);fX=p.X();fY=p.Y();fZ=p.Z();}
-  AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y                  ):AliHit(     ),fCh(c ),fPid(pid),fQ(0 ),fLx(x),fLy(y){QdcTot(e);fTrack=tid;}//manual ctor 
+  AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y,const TVector3 &p):AliHit(0,tid),fCh(c ),fPid(pid),fQ(0 ),fLx(x),fLy(y){e=QdcTot(e);fX=p.X();fY=p.Y();fZ=p.Z();}
+  AliHMPIDHit(Int_t c,Float_t &e,Int_t pid,Int_t tid,Float_t x,Float_t y                  ):AliHit(     ),fCh(c ),fPid(pid),fQ(0 ),fLx(x),fLy(y){e=QdcTot(e);fTrack=tid;}//manual ctor 
   AliHMPIDHit(const AliHMPIDHit &h):AliHit(h),fCh(h.fCh),fPid(h.fPid),fQ(h.fQ),fLx(h.fLx),fLy(h.fLy) {}//copy ctor
   virtual ~AliHMPIDHit()                                                                                                                                 {}
 //framework part
@@ -26,9 +26,9 @@ public:
          Float_t LorsY  (                               )const{return fLy;                                    }       //hit Y position in LORS, [cm]
          Int_t   Pid    (                               )const{return fPid;                                   }       //PID
          Float_t Q      (                               )const{return fQ;                                     }       //total charge, [QDC]
-  inline Float_t QdcTot (Float_t &e                     );                                                            //calculate total charge of the hit          
+  inline Float_t QdcTot (Float_t e                      );                                                            //calculate total charge of the hit          
          Int_t   Tid    (                               )const{return fTrack;                                 }       //TID
-         
+         void    SetQ   (Float_t q                      )     {fQ=q;                                          }       //for debugging...
 protected:                                                                     //AliHit has fTrack,fX,fY,fZ 
   Int_t    fCh;                                                                //Chamber
   Int_t    fPid;                                                               //PID
@@ -38,7 +38,7 @@ protected:                                                                     /
   ClassDef(AliHMPIDHit,5)                                                      //HMPID hit class 
 };//class AliHMPIDhit
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
-Float_t AliHMPIDHit::QdcTot(Float_t &e)
+Float_t AliHMPIDHit::QdcTot(Float_t e)
 {
 // Samples total charge of the hit
 // Arguments: e- hit energy [GeV] for mip Eloss for photon Etot   
@@ -57,7 +57,6 @@ Float_t AliHMPIDHit::QdcTot(Float_t &e)
     Double_t rnd=gRandom->Rndm(); if(rnd==0) rnd=1e-12;                                              //1e-12 is a protection against 0 from rndm  
     fQ-=qdcEle*TMath::Log(rnd);                
   }
-  e=fQ;
   return fQ;
 }  
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
index b94f62a..85c0f8c 100644 (file)
@@ -10,9 +10,6 @@
 #include <TGeoManager.h>   //Instance()
 #include <TVector3.h>      //Lors2Mars() Mars2Lors()
  
-static const int kCerenkov=50000050;  //??? go to something more general like TPDGCode
-static const int kFeedback=50000051;  //??? go to something more general like TPDGCode
-
 // Class providing all the needed parametrised information
 // to construct the geometry, to define segmentation and to provide response model
 // In future will also provide all the staff needed for alignment and calibration
@@ -37,7 +34,7 @@ public:
   void     Mars2LorsVec(Int_t c,Double_t *m,Float_t &th,Float_t &ph         )const{Double_t l[3]; fM[c]->MasterToLocalVect(m,l); Float_t pt=TMath::Sqrt(l[0]*l[0]+l[1]*l[1]); th=TMath::ATan(l[2]/pt); ph=TMath::ATan(l[0]/pt);}    
   TVector3 Norm        (Int_t c                                             )const{Double_t n[3]; Norm(c,n); return TVector3(n);               }//norm 
   void     Norm        (Int_t c,Double_t *n                                 )const{Double_t l[3]={0,0,1};fM[c]->LocalToMasterVect(l,n);        }//norm
-
+  
   enum EPlaneId {kPc,kRad,kAnod};            //3 planes in chamber 
 protected:
          AliHMPIDParam();             //default ctor is protected to enforce it to be singleton
index 988d6d5..9ebb4fb 100644 (file)
@@ -316,7 +316,7 @@ void AliHMPIDv1::GenFee(Float_t qtot)
     Int_t outputNtracksStored;    
     gAlice->GetMCApp()->PushTrack(1,                             //transport
                      gAlice->GetMCApp()->GetCurrentTrackNumber(),//parent track 
-                     kFeedback,                                  //PID
+                     50000051,                                   //PID
                     mom[0],mom[1],mom[2],mom[3],                //track momentum  
                      x4.X(),x4.Y(),x4.Z(),x4.T(),                //track origin 
                      pol[0],pol[1],pol[2],                       //polarization
@@ -484,7 +484,7 @@ void AliHMPIDv1::StepHistory()
     case kProton:      sParticle="PROTON"    ;break;
     case kNeutron:     sParticle="neutron"   ;break;
     case kGamma:       sParticle="gamma"     ;break;
-    case kCerenkov:    sParticle="CKOV"    ;break;
+    case 50000050:     sParticle="CKOV"      ;break;
     case kPi0:         sParticle="Pi0"       ;break;  
     case kPiPlus:      sParticle="Pi+"       ;break;  
     case kPiMinus:     sParticle="Pi-"       ;break;  
@@ -529,7 +529,7 @@ void AliHMPIDv1::StepManager()
   Int_t   copy; //volume copy aka node
   
 //Treat photons    
-  if((gMC->TrackPid()==kCerenkov||gMC->TrackPid()==kFeedback)&&gMC->CurrentVolID(copy)==fIdPc){  //photon (Ckov or feedback) hit PC (fIdPc)
+  if((gMC->TrackPid()==50000050||gMC->TrackPid()==50000051)&&gMC->CurrentVolID(copy)==fIdPc){  //photon (Ckov or feedback) hit PC (fIdPc)
     if(gMC->Edep()>0){                                                                           //photon survided QE test i.e. produces electron
       if(IsLostByFresnel()){ gMC->StopTrack(); return;}                                          //photon lost due to fersnel reflection on PC       
                        gMC->CurrentVolOffID(2,copy);                                             //current chamber since geomtry tree is HMPID-Rppf-Rpc
index a82da64..0a41475 100644 (file)
@@ -78,8 +78,11 @@ void SimEsd(AliESD *pEsd)
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 void SimHits(AliESD *pEsd, TClonesArray *pHits)
 {
+  const Int_t kCerenkov=AliHMPIDParam::CkovCode();
+  const Int_t kFeedback=AliHMPIDParam::FeedCode();
+  
   AliHMPIDRecon rec;
-  const Int_t kCerenkov=50000050,kFeedback=50000051;
+  
   Int_t hc=0; TVector2 pos;
   for(Int_t iTrk=0;iTrk<pEsd->GetNumberOfTracks();iTrk++){//tracks loop
     AliESDtrack *pTrk=pEsd->GetTrack(iTrk);
@@ -115,7 +118,7 @@ void ReadHits(TClonesArray *pHitLst)
 void DrawCh(Int_t iCh) 
 { 
   gPad->Range(-10,-10,AliHMPIDDigit::SizeAllX()+5,AliHMPIDDigit::SizeAllY()+5); 
-  TLatex txt; txt.SetTextSize(0.1); txt.DrawLatex(-5,-5,Form("%i",iCh));
+  if(iCh>=0){TLatex txt; txt.SetTextSize(0.1); txt.DrawLatex(-5,-5,Form("%i",iCh));}
   
   for(Int_t iPc=AliHMPIDDigit::kMinPc;iPc<=AliHMPIDDigit::kMaxPc;iPc++){
     TBox *pBox=new TBox(AliHMPIDDigit::fMinPcX[iPc],AliHMPIDDigit::fMinPcY[iPc],
index a867113..b0bb6bf 100644 (file)
@@ -200,140 +200,7 @@ void t1(Int_t case=1)
   
   cl->Print();  
 }//t1()
-void tst(Int_t nEvts=111,Int_t type=999)
-{
-  
-  TLegend *lQ=new TLegend(0.5,0.5,0.9,0.9);
-
-  TH1F *hQ7  =new TH1F("hQ7"  ,"" ,300,-50,2000);     hQ7  ->SetLineColor(kRed);      lQ->AddEntry(hQ7  ,"Ckov 7 eV");  hQ7->SetStats(0);
-  TH1F *hQ200=new TH1F("hQ200","" ,300,-50,2000);     hQ200->SetLineColor(kBlack);    lQ->AddEntry(hQ200,"mip 200 eV");
-  TH1F *hQ500=new TH1F("hQ500","" ,300,-50,2000);     hQ500->SetLineColor(kCyan);     lQ->AddEntry(hQ500,"mip 500 eV");
-  TH1F *hQ900=new TH1F("hQ900","" ,300,-50,2000);     hQ900->SetLineColor(kGreen);    lQ->AddEntry(hQ900,"mip 900 eV");
-  
-  TH1F *hCluPerEvt=new TH1F("hCluPerEvt","# clusters per event",11,-0.5,10.5);
-  TH1F *hCluChi2  =new TH1F("hChi2","Chi2 ",1000,0,100);
-  TH1F *hCluFlg   =new TH1F("hCluFlg","Cluster flag",14,-1.5,12.5);                       hCluFlg->SetFillColor(5);
-  TH1F *hCluRawSize= new TH1F("hCluRawSize","Raw cluster size ",100,0,100);
-  
-  TH2F *pCluMapSi1=new TH2F("cluMapSi1","Size 1 map"       ,1700,-10,160,1700,-10,160);           
-  TH2F *pCluMapLo0=new TH2F("cluMNoLo0","Loc Max 0 map"    ,1700,-10,160,1700,-10,160);     
-  TH2F *pCluMapLo1=new TH2F("cluMapLo1","Loc Max 1 map"    ,1700,-10,160,1700,-10,160);        
-  TH2F *pCluMapUnf=new TH2F("cluMapUnf","Unfolded map"     ,1700,-10,160,1700,-10,160);         
-  TH2F *pCluMapEdg=new TH2F("cluMapEdg","On edge map"      ,1700,-10,160,1700,-10,160);         
-  TH2F *pCluMapCoG=new TH2F("cluMapCoG","CoG  map"         ,1700,-10,160,1700,-10,160);            
-  TH2F *pCluMapEmp=new TH2F("cluMapEmp","undefined-empty"  ,1700,-10,160,1700,-10,160);      
-
-  TH1F *hHitCluDifX = new TH1F("hHitCluDifX" ,";entries;x_{Hit}-x_{Clu} [cm]"   ,2000,-2,2);          hHitCluDifX->Sumw2();    hHitCluDifX->SetFillColor(kYellow);
-  TH1F *hHitCluDifY = new TH1F("hHitCluDifY" ,";entries;y_{Hit}-y_{Clu} [cm]"   ,2000,-2,2);          hHitCluDifY->Sumw2();    hHitCluDifY->SetFillColor(kYellow);
-  TH2F *hHitCluDifXY= new TH2F("hHitCluDifXY",";x_{Hit}-x_{Clu};y_{Hit}-y_{Clu}",2000,-2,2,2000,-2,2);hHitCluDifXY->Sumw2();  
-  TH1F *hHitCluDifQ = new TH1F("hHitCluDifQ" ,";entries;Q_{Hit}-Q_{Clu}"        ,200 ,-100,100);      hHitCluDifQ->Sumw2();    hHitCluDifQ->SetFillColor(kYellow);
-  Float_t e200=200e-9,e500=500e-9,e900=900e-9,e7=7e-9;//predefined  Eloss
-  
-  
-  AliHMPIDHit hit(0,0,kProton,0,0,0);
-  for(int i=0;i<10000;i++){hQ200->Fill(hit.QdcTot(e200));  hQ500->Fill(hit.QdcTot(e500));   hQ900->Fill(hit.QdcTot(e900));  hQ7  ->Fill(hit.QdcTot(e7));}
-  
-  TClonesArray hits("AliHMPIDHit");  TClonesArray sdigs("AliHMPIDDigit");
-  TObjArray digs(7); for(Int_t i=0;i<7;i++) digs.AddAt(new TClonesArray("AliHMPIDDigit"),i);
-  TObjArray clus(7); for(Int_t i=0;i<7;i++) clus.AddAt(new TClonesArray("AliHMPIDCluster"),i);
-  
-    
-  for(Int_t iEvt=0;iEvt<nEvts;iEvt++){//events loop
-    if(iEvt%500==0)Printf("============> iEvt = %d ",iEvt);
-    
-    Int_t ch,pid; Float_t e,hitx,hity,hitq;
-    Int_t nHits=(type==999)?1:40;
-    for(Int_t iHit=0;iHit<nHits;iHit++){//hits loop for the current event
-      switch(iHit){
-        case 0:  ch=0;pid=kProton;e=e200;hitx=16.0+gRandom->Rndm()*0.8;hity= 16.8+gRandom->Rndm()*0.84;break; //mip ramdomly distributed in one pad in the middle
-        case 1:  ch=0;pid=kProton;e=e200;hitx=0.4;hity=0.42;break; //mip in left-hand bottom coner of chamber 0
-        case 2:  ch=0;pid=kProton;e=e200;hitx=0.4;hity=30  ;break; //mip on left edge of chamber 0
-        case 3:  ch=0;pid=kProton;e=e200;hitx=40; hity=0.42;break; //mip on bottom edge of chamber 0
-        default: ch=gRandom->Rndm()*6; pid=(gRandom->Rndm()>0.9)? kProton:kCerenkov;
-                  if(pid==kProton) 
-                    e=gRandom->Rndm()*900e-9; 
-                  else
-                    e=5.5e-9+3e-9*gRandom->Rndm();
-                  x=gRandom->Rndm()*AliHMPIDDigit::SizeAllX(); y=gRandom->Rndm()*AliHMPIDDigit::SizeAllY();break; //random hit
-      }
-      new(hits[iHit]) AliHMPIDHit(ch,e,pid,iHit,hitx,hity);                          
-      hitq=e;
-    }//hits loop
-    
-    AliHMPIDv1::Hit2Sdi(&hits,&sdigs);
-    AliHMPIDDigitizer::Sdi2Dig(&sdigs,&digs);     
-    AliHMPIDReconstructor::Dig2Clu(&digs,&clus);
-          
-    for(Int_t iCh=AliHMPIDDigit::kMinCh;iCh<=AliHMPIDDigit::kMaxCh;iCh++){//chambers loop
-      TClonesArray *pDigs=(TClonesArray *)digs.UncheckedAt(iCh);
-      TClonesArray *pClus=(TClonesArray *)clus.UncheckedAt(iCh);
-        
-      hCluPerEvt->Fill(pClus->GetEntriesFast());
-      for(Int_t iClu=0;iClu<pClus->GetEntriesFast();iClu++){//clusters loop
-        AliHMPIDCluster *pClu=(AliHMPIDCluster*)pClus->UncheckedAt(iClu);
-        Float_t clux=pClu->X(); Float_t cluy=pClu->Y(); Float_t cluq=pClu->Q();
-        hCluFlg->Fill(pClu->Status());
-        hCluChi2->Fill(pClu->Chi2());
-        hCluRawSize->Fill(pClu->Size());
-        
-        switch(pClu->Status()){
-            case AliHMPIDCluster::kSi1:   pCluMapSi1->Fill(clux,cluy); break;
-            case AliHMPIDCluster::kLo1:   pCluMapLo1->Fill(clux,cluy); break;
-            case AliHMPIDCluster::kUnf:   pCluMapUnf->Fill(clux,cluy); break; 
-            case AliHMPIDCluster::kMax:   pCluMapMax->Fill(clux,cluy); break;
-            case AliHMPIDCluster::kEdg:   pCluMapEdg->Fill(clux,cluy); break;
-            case AliHMPIDCluster::kCoG:   pCluMapCoG->Fill(clux,cluy); break;
-            case AliHMPIDCluster::kNoLoc: pCluMapNoLoc->Fill(clux,cluy); break;
-            default:     pCluMapEmp->Fill(clux,cluy); break;           
-        }
-        
-        hHitCluDifX->Fill(hitx-clux); hHitCluDifY->Fill(hity-cluy); hHitCluDifXY->Fill(hitx-clux,hity-cluy); hHitCluDifQ->Fill(hitq-cluq);
-        
-      }//clusters loop
-    }//chambers loop
-      
-    hits.Delete();  sdigs.Delete();  for(int i = 0;i<7;i++){((TClonesArray*)digs.At(i))->Delete();((TClonesArray*)clus.At(i))->Delete();}
-  }//events loop      
-      
-  gStyle->SetPalette(1);
-  TCanvas *pC2=new TCanvas("Digit canvas","Digit canvas",1280,800); pC2->Divide(3,3);
-  pC2->cd(1);gPad->SetLogy(1);hHitCluDifX->Draw("hist");
-  pC2->cd(2);gPad->SetLogy(1);hHitCluDifY->Draw("hist");
-  pC2->cd(3);gPad->SetLogz(1);hHitCluDifXY->Draw("colz");
-  pC2->cd(4);gPad->SetLogy(1);hHitCluDifQ->Draw("hist");
-  pC2->cd(5);gPad->SetLogy(1);hCluFlg->Draw();
-  pC2->cd(6);gPad->SetLogy(1);hCluChi2->Draw();
-  pC2->cd(7);                 hCluRawSize->Draw();
-  pC2->cd(8);                 hCluPerEvt->Draw("colz");
-  pC2->cd(9);                 hQckov->Draw(); hQm200->Draw("same"); hQm500->Draw("same"); hQm900->Draw("same"); lQ->Draw();
-  TCanvas *pC1=new TCanvas("ClusterMaps","Cluster maps",1280,800); pC1->Divide(3,3);
-  pC1->cd(1);  pCluMapSi1->Draw();  DrawPc(kFALSE);
-  pC1->cd(2);  pCluMapLo1->Draw();  DrawPc(kFALSE);
-  pC1->cd(3);  pCluMapUnf->Draw();  DrawPc(kFALSE);
-  pC1->cd(5);  pCluMapMax->Draw();  DrawPc(kFALSE);
-  pC1->cd(6);  pCluMapEdg->Draw(); DrawPc(kFALSE);
-  pC1->cd(7);  pCluMapCoG->Draw(); DrawPc(kFALSE);
-  pC1->cd(8);  pCluMapNoLoc->Draw();DrawPc(kFALSE);
-  pC1->cd(9);  pCluMapEmp->Draw(); DrawPc(kFALSE);
-   
-  pC1->SaveAs("$HOME/HitMaps.png");  //?????
-  pC2->SaveAs("$HOME/HitCluDif.gif");  
-  
-  Printf("Digits - raw -digits conversion...");  
-  
-  AliHMPIDDigit d1,d2; Int_t ddl,r,d,a;UInt_t w32;
-  for(Int_t iCh=AliHMPIDDigit::kMinCh;iCh<=AliHMPIDDigit::kMaxCh;iCh++)
-  for(Int_t iPc=AliHMPIDDigit::kMinPc;iPc<=AliHMPIDDigit::kMaxPc;iPc++)
-  for(Int_t iPx=AliHMPIDDigit::kMinPx;iPx<=AliHMPIDDigit::kMaxPx;iPx++)
-  for(Int_t iPy=AliHMPIDDigit::kMinPy;iPy<=AliHMPIDDigit::kMaxPy;iPy++){
-    d1.Set(iCh,iPc,iPx,iPy,3040);   //set digit               
-    d1.Raw(w32,ddl,r,d,a);          //get raw word for this digit 
-    d2.Raw(w32,ddl);                //set another digit from that raw word
-    if(d1.Compare(&d2)) {d1.Print(); d2.Print(); Printf("");}//compare them
-  }
-  Printf("OK");
-}//tst()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++