FEDRA emulsion software from the OPERA Collaboration
emdbl_tb.cpp File Reference
#include <assert.h>
#include <string.h>
#include <iostream>
#include <TRint.h>
#include <TEnv.h>
#include "EdbLog.h"
#include "EdbScanProc.h"
#include "EdbCouplesTree.h"
Include dependency graph for emdbl_tb.cpp:

Functions

void DoTraceBackCP (EdbID id, const char *treename, TEnv &cenv)
 
void FillRawPat (const EdbRunAccess &run, const EdbPattern &pp, EdbPattern &ppr, EdbPattern &ppv, const TArrayI &viewid, const TArrayI &ind)
 
void GroupViews (EdbID &cpid, const EdbPattern &pp1, const EdbPattern &pp2, EdbCell1 &cv1, EdbCell1 &cv2)
 
void GroupViews (EdbPattern &p, EdbCell1 &c)
 
int main (int argc, char *argv[])
 
void print_help_message ()
 
void set_default (TEnv &cenv)
 
void WriteRaw (EdbRunAccess &run, EdbRun &runout, EdbCell1 &cv, int rs)
 

Variables

EdbScanProc sproc
 

Function Documentation

◆ DoTraceBackCP()

void DoTraceBackCP ( EdbID  id,
const char *  treename,
TEnv &  cenv 
)
99 {
100  // find raw segments corresponding to the couples tree and create new file .dbl.raw.root
101  // another with parallel couples tree in raw coordinates
102  // (to be joined as a fiends trees for analysis)
103 
104  TString cpfile;
105  sproc.MakeFileName(cpfile, id,"cp.root");
106  EdbCouplesTree cptree_in;
107  cptree_in.InitCouplesTree(treename,cpfile.Data());
108  EdbPattern pp,pp1,pp2;
109  cptree_in.GetCPData( &pp,&pp1,&pp2 );
110 
111  int nseg = pp1.N();
112  TArrayI viewid1(nseg);
113  TArrayI ind1(nseg);
114  TArrayI viewid2(nseg);
115  TArrayI ind2(nseg);
116 
117  for(int isg=0; isg<nseg; isg++)
118  {
119  viewid1[isg] = pp1.GetSegment(isg)->Vid(0);
120  viewid2[isg] = pp2.GetSegment(isg)->Vid(0);
121  }
122  TMath::Sort(nseg, viewid1.GetArray(), ind1.GetArray(),0);
123  TMath::Sort(nseg, viewid2.GetArray(), ind2.GetArray(),0);
124 
126  sproc.InitRunAccess(run, id);
127  EdbPattern pp1r(0,0,0,nseg);
128  EdbPattern pp2r(0,0,0,nseg);
129  EdbPattern pp1v(0,0,0,nseg);
130  EdbPattern pp2v(0,0,0,nseg);
131 
132  FillRawPat(run, pp1, pp1r, pp1v, viewid1, ind1);
133  FillRawPat(run, pp2, pp2r, pp2v, viewid2, ind2);
134 
135  EdbCouplesTree cptree_out;
136  sproc.MakeFileName(cpfile, id,"dbl.cp.root");
137  cptree_out.InitCouplesTree(treename,cpfile.Data(),"UPDATE");
138 
139  for(int i=0; i<nseg; i++)
140  {
141  EdbSegP *s1 = pp1r.GetSegment(i);
142  EdbSegP *s2 = pp2r.GetSegment(i);
143  EdbSegP *sv1 = pp1v.GetSegment(i);
144  EdbSegP *sv2 = pp2v.GetSegment(i);
145  sv1->SetTX(sv2->X());
146  sv1->SetTY(sv2->Y());
147  cptree_out.Fill( s1, s2, sv1);
148  }
149  cptree_out.WriteTree();
150  cptree_out.Close();
151  cptree_in.Close();
152 }
Definition: EdbCouplesTree.h:17
bool InitCouplesTree(const char *name="couples", const char *fname=0, Option_t *mode="READ")
Definition: EdbCouplesTree.cxx:87
void Close()
Definition: EdbCouplesTree.cxx:70
int GetCPData(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0)
Definition: EdbCouplesTree.cxx:325
Int_t Fill(EdbSegP *s1, EdbSegP *s2, EdbSegP *s=0, EdbSegCouple *cp=0, float xv=0, float yv=0, int pid1=0, int pid2=0)
Definition: EdbCouplesTree.cxx:200
bool WriteTree()
Definition: EdbCouplesTree.cxx:191
Definition: EdbPattern.h:280
Definition: EdbRunAccess.h:22
bool InitRunAccess(EdbRunAccess &ra, int id[4], bool do_update=false)
Definition: EdbScanProc.cxx:2383
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1885
Definition: EdbSegP.h:18
void SetTX(Float_t tx)
Definition: EdbSegP.h:176
Float_t X() const
Definition: EdbSegP.h:170
void SetTY(Float_t ty)
Definition: EdbSegP.h:177
Float_t Y() const
Definition: EdbSegP.h:171
Int_t Vid(int i) const
Definition: EdbSegP.h:165
Int_t N() const
Definition: EdbPattern.h:89
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
void FillRawPat(const EdbRunAccess &run, const EdbPattern &pp, EdbPattern &ppr, EdbPattern &ppv, const TArrayI &viewid, const TArrayI &ind)
Definition: emdbl_tb.cpp:154
EdbScanProc sproc
Definition: emdbl_tb.cpp:13
EdbRun * run
Definition: check_raw.C:38
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31

◆ FillRawPat()

void FillRawPat ( const EdbRunAccess run,
const EdbPattern pp,
EdbPattern ppr,
EdbPattern ppv,
const TArrayI &  viewid,
const TArrayI &  ind 
)
161 {
162  int nseg = pp.N();
163  int iv=-1;
164  EdbView *vin =0;
165  EdbSegP s;
166  EdbSegP sv;
167  for(int isg=0; isg<nseg; isg++)
168  {
169  int k = ind[isg];
170  if(viewid[k]!=iv) {
171  iv=viewid[k];
172  vin = run.GetRun()->GetEntry(iv);
173  printf("isg=%d iv= %d\n",isg,iv);
174  }
175  EdbSegP *sp = pp.GetSegment(k);
176  EdbSegment *sraw = vin->GetSegment(sp->Vid(1));
177  s.Set(sraw->GetID(), sraw->GetX0(),sraw->GetY0(), sraw->GetTx(), sraw->GetTy(), sraw->GetPuls(),0 );
178  s.SetZ(sraw->GetZ0());
179  s.SetVid(sp->Vid(0),sp->Vid(1));
180  s.SetAid(sp->Aid(0),sp->Aid(1),sp->Aid(2));
181  ppr.AddSegment(k,s);
182 
183  sv.Set(vin->GetViewID(), vin->GetXview(), vin->GetYview(), 0, 0, 0, 0);
184  ppv.AddSegment(k,sv);
185  }
186 
187 
188 }
EdbView * GetEntry(int entry, int ih=1, int icl=0, int iseg=1, int itr=0, int ifr=0)
Definition: EdbRun.cxx:489
virtual Float_t GetX0() const
Definition: EdbSegment.h:37
virtual Float_t GetTx() const
Definition: EdbSegment.h:40
virtual Float_t GetZ0() const
Definition: EdbSegment.h:39
virtual Float_t GetY0() const
Definition: EdbSegment.h:38
virtual Float_t GetTy() const
Definition: EdbSegment.h:41
void SetZ(float z)
Definition: EdbSegP.h:122
void SetVid(int vid, int sid)
Definition: EdbSegP.h:134
Int_t Aid(int i) const
Definition: EdbSegP.h:166
void SetAid(int a, int v, int side=0)
Definition: EdbSegP.h:135
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86
Definition: EdbSegment.h:61
Int_t GetPuls() const
Definition: EdbSegment.h:88
Int_t GetID() const
Definition: EdbSegment.h:90
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:71
Definition: EdbView.h:134
Float_t GetXview() const
Definition: EdbView.h:193
Int_t GetViewID() const
Definition: EdbView.h:190
EdbSegment * GetSegment(int i) const
Definition: EdbView.h:219
Float_t GetYview() const
Definition: EdbView.h:194
Int_t viewid
Definition: tlg2pattern.C:113
EdbSegP * s
Definition: tlg2pattern.C:32

◆ GroupViews() [1/2]

void GroupViews ( EdbID cpid,
const EdbPattern pp1,
const EdbPattern pp2,
EdbCell1 cv1,
EdbCell1 cv2 
)

◆ GroupViews() [2/2]

void GroupViews ( EdbPattern p,
EdbCell1 c 
)

◆ main()

int main ( int  argc,
char *  argv[] 
)
53 {
54  if (argc < 2) { print_help_message(); return 0; }
55 
56  TEnv cenv("emdbl_tb");
58  gEDBDEBUGLEVEL = cenv.GetValue("emdbl_tb.EdbDebugLevel" , 1);
59  const char *env = cenv.GetValue("emdbl_tb.env" , "dbl_tb.rootrc");
60  const char *outdir = cenv.GetValue("emdbl_tb.outdir" , "..");
61 
62  bool do_id=false;
63  EdbID id;
64 
65  for(int i=1; i<argc; i++ ) {
66  char *key = argv[i];
67 
68  if (!strncmp(key,"-id=",4))
69  {
70  if(strlen(key)>4) if(id.Set(key+4)) do_id=true;
71  }
72  else if(!strncmp(key,"-v=",3))
73  {
74  if(strlen(key)>3) gEDBDEBUGLEVEL = atoi(key+3);
75  }
76  }
77 
78  if(!(do_id)) { print_help_message(); return 0; }
79 
80  cenv.SetValue("emdbl_tb.env" , env);
81  cenv.ReadFile( cenv.GetValue("emdbl_tb.env" , "traceback.rootrc") ,kEnvLocal);
82  cenv.SetValue("emdbl_tb.outdir" , outdir);
83  sproc.eProcDirClient = cenv.GetValue("emdbl_tb.outdir","..");
84  cenv.WriteFile("dbl_tb.save.rootrc");
85 
86 
87  printf("\n----------------------------------------------------------------------------\n");
88  printf("Traceback doublets from %s\n" ,id.AsString());
89  printf("----------------------------------------------------------------------------\n\n");
90 
91  DoTraceBackCP( id, "doublets1", cenv );
92  DoTraceBackCP( id, "doublets2", cenv );
93 
94  return 0;
95 }
Definition: EdbID.h:7
TString eProcDirClient
Definition: EdbScanProc.h:14
void set_default(TEnv &cenv)
Definition: emdbl_tb.cpp:43
void print_help_message()
Definition: emdbl_tb.cpp:28
void DoTraceBackCP(EdbID id, const char *treename, TEnv &cenv)
Definition: emdbl_tb.cpp:98
TEnv cenv("emrec")
const char * outdir
Definition: emrec.cpp:37
gEDBDEBUGLEVEL
Definition: energy.C:7
UInt_t id
Definition: tlg2pattern.C:118

◆ print_help_message()

void print_help_message ( )
29 {
30  cout<< "\n For a given file *.cp.root extract raw segments for all couples in doublets tree \n";
31  cout<< " and create a parallel tree with them\n";
32  cout<< "\n";
33  cout<< "\nUsage: \n\t emdbl_tb -id=ID [-v=DEBUG] \n";
34  cout<< "\nExample: \n";
35  cout<< "\t emdbl_tb -id=4554.10.1.1 -v=2\n";
36  cout<< "\n If the data location directory if not explicitly defined\n";
37  cout<< " the current directory will be assumed to be the brick directory \n";
38  cout<< "\n If the parameters file (dbl_tb.rootrc) is not presented - the default \n";
39  cout<< " parameters will be used. After the execution them are saved into dbl_tb.save.rootrc file\n";
40  cout<<endl;
41 }

◆ set_default()

void set_default ( TEnv &  cenv)
44 {
45  // default parameters
46  cenv.SetValue("emdbl_tb.outdir" , ".." );
47  cenv.SetValue("emdbl_tb.env" , "traceback.rootrc");
48  cenv.SetValue("emdbl_tb.EdbDebugLevel" , 1 );
49 }

◆ WriteRaw()

void WriteRaw ( EdbRunAccess run,
EdbRun runout,
EdbCell1 cv,
int  rs 
)
192 {
193  int nv = cv.Ncell();
194  for( int iv=0; iv<nv; iv++ ) {
195  int nsv=cv.Bin(iv);
196  if(!nsv) continue;
197 
198  printf("iv = %d nsv = %d\n",iv,nsv);
199 
200  EdbView *vin = run.GetRun()->GetEntry(iv);
201  EdbView *vout = runout.GetView();
202  vout->GetHeader()->Copy( vin->GetHeader() );
203 
204  for( int is=0; is<nsv; is++ ) {
205  EdbSegP *sp = (EdbSegP *)(cv.GetObject(iv,is));
206 
207  EdbSegment *sraw = vin->GetSegment(sp->Vid(1));
208  if(rs>0) run.ApplyCorrections( *vin, *sraw, rs );
209 
210  if(gEDBDEBUGLEVEL>3) {
211  printf("\n");
212  sp->PrintNice();
213  sraw->Print();
214  }
215 
216  vout->AddSegment(sraw);
217 
218  EdbTrack t( sp->X(), sp->Y(), sp->Z(), sp->TX(), sp->TY(),sp->DZ(), sp->ID() );
219  vout->AddTrack(&t); // save sp for crosscheck. Note that the last emlink should be done with all corrections off for consistency
220 
221  }
222  runout.AddView(vout);
223  }
224 }
TCanvas * cv
Definition: RecDispMC_Profiles.C:63
TTree * t
Definition: check_shower.C:4
void AddView()
Definition: EdbRun.cxx:332
EdbView * GetView() const
Definition: EdbRun.h:109
Float_t DZ() const
Definition: EdbSegP.h:151
Float_t TX() const
Definition: EdbSegP.h:172
Int_t ID() const
Definition: EdbSegP.h:144
Float_t Z() const
Definition: EdbSegP.h:150
void PrintNice() const
Definition: EdbSegP.cxx:418
Float_t TY() const
Definition: EdbSegP.h:173
void Print(Option_t *opt=0) const
Definition: EdbSegment.cxx:139
Definition: EdbSegment.h:125
void Copy(EdbViewHeader *h)
Definition: EdbView.h:65
EdbViewHeader * GetHeader() const
Definition: EdbView.h:163
void AddTrack(EdbTrack *t)
Definition: EdbView.cxx:261
EdbSegment * AddSegment(float x, float y, float z, float tx, float ty, float dz=0, int side=0, int puls=0, int id=-1)
Definition: EdbView.h:231

Variable Documentation

◆ sproc

EdbScanProc sproc