MakeClass ( 8 3/4 )

Jacek M. Holeczek (holeczek@us.edu.pl)
Fri, 21 May 1999 10:23:06 +0200 (MET DST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.GSO.3.96.990521101713.7070H@uranos.cto.us.edu.pl>

Hi,
Please find attached some example files generated by the new version of my
MakeClass suite for the $ROOTSYS/tutorials/hsimple.root file.
Some notes on how to use the generated skeleton analysis :
1. You can use the ntuple.[hc]xx directly in root ( as a CINT macro ) :
root > .L ntuple.cxx
root > ntuple *n = new ntuple()
or, you can build the shared library ntuple.so ( an example Makefile
for Linux is also attached ), and then :
root > .L ntuple.so
root > ntuple *n = new ntuple()
The second method is preferred, as it gives much better performance.
2. You can "hardcode" your analysis into the ntuple::Loop() function, as
in the example file ntuple.cxx, but this makes the problem, that
whenever you need to make any small change in it, you need to "reload"
the whole analysis ( including creating a new shared library, if you
use this method ) :
root > .L ntuple.so // or ".L ntuple.cxx"
root > ntuple *n = new ntuple()
root > n->Loop()
3. You can leave the ntuple::Loop() function EMPTY ( you won't need it
later ) and create the ntuple.so ONCE. Then you can copy the ntuple.cxx
into the loop.cxx, and modify the ntuple::Loop() skeleton ( in loop.cxx
file ) to be an "Int_t loop(ntuple *)" function, and later you can :
root > .L ntuple.so
root > ntuple *n = new ntuple()
root > .L loop.cxx
root > loop(n)
or simply :
root > .L ntuple.so
root > ntuple *n = new ntuple()
root > .x loop.cxx(n)
Note, whenever you change anything in your analysis "loop" you only
need to reload the ".L loop.cxx", no changes to the shared library
ntuple.so are required ( you get the full compiled code speed in
accessing your ntuple mixed with CINT flexibility ).
An example loop.cxx is also attached
4. Last, but not least, there is an automatically generated function :
Int_t ntuple::Loop(Int_t (*analysis)(ntuple *))
which loops over all events and for every event calls the given
"Int_t analysis(ntuple *)" function which is expected to analyze the
current ( single ) event. And again, you can mix compiled ntuple.so
( created ONCE ) with interpreted "analysis" :
root > .L ntuple.so
root > ntuple *n = new ntuple()
root > .L analysis.cxx
root > n->Loop(analysis)
Note again, whenever you change anything in your "analysis", you only
need to reload the ".L analysis.cxx", no changes to the shared library
ntuple.so are required. An example analysis.cxx is also attached.
Warning : current CINT, as shiped with root 2.21/08 has some problems
with this method, you probably need to wait till the new root 2.22 is
out which has the new CINT in it.
Due to current CINT limitations one cannot use code generated by this
macro for multi-dimensional arrays directly in CINT ( as a CINT macro ),
one needs to compile the analysis code and create the shared library.
Have fun,
Jacek.

---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ntuple.hxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990521102306.7070I@uranos.cto.us.edu.pl>
Content-Description: ntuple.hxx

Ly8gIyANCi8vICMgVGhpcyBjbGFzcyBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCANCi8vICMgKFRodSBNYXkgMjAgMjA6MjM6MjUgMTk5OSBi
eSBST09UIHZlcnNpb24gMi4yMS8wOCkgDQovLyAjIGZyb20gVFRyZWUgbnR1
cGxlL0RlbW8gbnR1cGxlIA0KLy8gIyBmb3VuZCBvbiBmaWxlOiBoc2ltcGxl
LnJvb3QgDQovLyAjIA0KDQovLyAjICoqKiBUaGUgbnR1cGxlIGNsYXNzIGlu
dGVyZmFjZSAqKiogDQojaWZuZGVmIG50dXBsZV9oeHgNCiNkZWZpbmUgbnR1
cGxlX2h4eA0KDQovLyAjIFJlcXVpcmVkIGluY2x1ZGVzIA0KI2lmbmRlZiBf
X0NJTlRfXw0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyZWFt
Lmg+DQojaW5jbHVkZSAiVFJPT1QuaCINCiNpbmNsdWRlICJUVHJlZS5oIg0K
I2luY2x1ZGUgIlRGaWxlLmgiDQojaW5jbHVkZSAiQXBpLmgiDQojZWxzZQ0K
Y2xhc3MgVEJyYW5jaDsNCmNsYXNzIFRUcmVlOw0KY2xhc3MgVEZpbGU7DQoj
ZW5kaWYNCg0KLy8gIyBjbGFzcyBudHVwbGUgDQpjbGFzcyBudHVwbGUgew0K
cHVibGljOg0KICAvLyAjIHB1YmxpYyB2YXJpYWJsZXMgDQogIFRUcmVlICAg
ICAgICAgICAqZlRyZWU7IC8vIHBvaW50ZXIgdG8gdGhlIGFuYWx5c2VkIFRU
cmVlDQogIEludF90ICAgICAgICAgICBmRXZlbnQ7IC8vIGN1cnJlbnQgRXZl
bnQgbnVtYmVyDQogIC8vICMgZGVjbGFyYXRpb24gb2YgYnJhbmNoZXMgDQog
IEludF90ICAgICAgICAgICBicmFuY2hfcHg7DQogIFRCcmFuY2ggICAgICAg
ICAqYnJhbmNoX3BvaW50ZXJfcHg7DQogIEludF90ICAgICAgICAgICBicmFu
Y2hfcHk7DQogIFRCcmFuY2ggICAgICAgICAqYnJhbmNoX3BvaW50ZXJfcHk7
DQogIEludF90ICAgICAgICAgICBicmFuY2hfcHo7DQogIFRCcmFuY2ggICAg
ICAgICAqYnJhbmNoX3BvaW50ZXJfcHo7DQogIEludF90ICAgICAgICAgICBi
cmFuY2hfcmFuZG9tOw0KICBUQnJhbmNoICAgICAgICAgKmJyYW5jaF9wb2lu
dGVyX3JhbmRvbTsNCiAgSW50X3QgICAgICAgICAgIGJyYW5jaF9pOw0KICBU
QnJhbmNoICAgICAgICAgKmJyYW5jaF9wb2ludGVyX2k7DQogIC8vICMgZGVj
bGFyYXRpb24gb2YgbGVhdmVzIA0KICBGbG9hdF90ICAgICAgICAgbGVhZl9w
eDsNCiAgRmxvYXRfdCAgICAgICAgICZweCgpIHtpZiAoYnJhbmNoX3B4KSBy
ZXR1cm4gbGVhZl9weDticmFuY2hfcG9pbnRlcl9weC0+R2V0RXZlbnQoZkV2
ZW50KTticmFuY2hfcHg9MTtyZXR1cm4gbGVhZl9weDt9DQogIEZsb2F0X3Qg
ICAgICAgICBsZWFmX3B5Ow0KICBGbG9hdF90ICAgICAgICAgJnB5KCkge2lm
IChicmFuY2hfcHkpIHJldHVybiBsZWFmX3B5O2JyYW5jaF9wb2ludGVyX3B5
LT5HZXRFdmVudChmRXZlbnQpO2JyYW5jaF9weT0xO3JldHVybiBsZWFmX3B5
O30NCiAgRmxvYXRfdCAgICAgICAgIGxlYWZfcHo7DQogIEZsb2F0X3QgICAg
ICAgICAmcHooKSB7aWYgKGJyYW5jaF9weikgcmV0dXJuIGxlYWZfcHo7YnJh
bmNoX3BvaW50ZXJfcHotPkdldEV2ZW50KGZFdmVudCk7YnJhbmNoX3B6PTE7
cmV0dXJuIGxlYWZfcHo7fQ0KICBGbG9hdF90ICAgICAgICAgbGVhZl9yYW5k
b207DQogIEZsb2F0X3QgICAgICAgICAmcmFuZG9tKCkge2lmIChicmFuY2hf
cmFuZG9tKSByZXR1cm4gbGVhZl9yYW5kb207YnJhbmNoX3BvaW50ZXJfcmFu
ZG9tLT5HZXRFdmVudChmRXZlbnQpO2JyYW5jaF9yYW5kb209MTtyZXR1cm4g
bGVhZl9yYW5kb207fQ0KICBGbG9hdF90ICAgICAgICAgbGVhZl9pOw0KICBG
bG9hdF90ICAgICAgICAgJmkoKSB7aWYgKGJyYW5jaF9pKSByZXR1cm4gbGVh
Zl9pO2JyYW5jaF9wb2ludGVyX2ktPkdldEV2ZW50KGZFdmVudCk7YnJhbmNo
X2k9MTtyZXR1cm4gbGVhZl9pO30NCiAgDQogIC8vICMgcHVibGljIGZ1bmN0
aW9ucyANCiAgbnR1cGxlKENoYXJfdCAqZmlsZW5hbWUgPSAwKTsNCiAgbnR1
cGxlKFRUcmVlICp0cmVlKSB7aWYgKCF0cmVlKSBudHVwbGUoKTtlbHNlIElu
aXQodHJlZSk7fQ0KICB+bnR1cGxlKCkgezt9DQogIFN0YXRfdCBHZXRFbnRy
aWVzKCkge2lmICghZlRyZWUpIHJldHVybiAwO3JldHVybiBmVHJlZS0+R2V0
RW50cmllcygpO30NCiAgSW50X3QgR2V0RXZlbnQoSW50X3QgZXZlbnQpOw0K
ICB2b2lkIEluaXQoVFRyZWUgKnRyZWUpOw0KICBJbnRfdCBMb29wKCk7DQog
IEludF90IExvb3AoSW50X3QgKCphbmFseXNpcykobnR1cGxlICopKTsNCiAg
dm9pZCBTaG93KEludF90IGV2ZW50ID0gLTEpOw0KfTsNCg0KI2VuZGlmDQoN
Ci8vICMgKioqIFRoZSBudHVwbGUgY2xhc3MgaW1wbGVtZW50YXRpb24gKioq
IA0KI2lmZGVmIG50dXBsZV9jeHgNCg0KLy8gIyBudHVwbGU6Om50dXBsZShD
aGFyX3QgKmZpbGVuYW1lKSANCm50dXBsZTo6bnR1cGxlKENoYXJfdCAqZmls
ZW5hbWUpDQp7DQogIC8vICMgSWYgcGFyYW1ldGVyIGZpbGVuYW1lIGlzIG5v
dCBzcGVjaWZpZWQgKG9yIHplcm8pLCBjb25uZWN0IHRoZSBmaWxlIA0KICAv
LyAjIHVzZWQgdG8gZ2VuZXJhdGUgdGhpcyBjbGFzcyAoIGhzaW1wbGUucm9v
dCApLiANCiAgaWYgKCFmaWxlbmFtZSB8fCAhKCpmaWxlbmFtZSkpIHsNCiAg
ICBmaWxlbmFtZSA9ICJoc2ltcGxlLnJvb3QiOw0KICB9DQogIC8vICMgRmlu
ZCB0aGUgcmVxdWlyZWQgZmlsZSBpbiBST09UIGFuZCwgaWYgbm90IGZvdW5k
LCBvcGVuIGl0LiANCiAgVEZpbGUgKmYgPSAoVEZpbGUqKWdST09ULT5HZXRM
aXN0T2ZGaWxlcygpLT5GaW5kT2JqZWN0KGZpbGVuYW1lKTsNCiAgaWYgKCFm
KSB7DQogICAgZiA9IG5ldyBURmlsZShmaWxlbmFtZSk7DQogIH0NCiAgLy8g
IyBGaW5kIHRoZSBudHVwbGUgdHJlZSBhbmQgaW5pdGlhbGl6ZSBvYmplY3Qu
IA0KICBUVHJlZSAqdCA9IChUVHJlZSopZ0RpcmVjdG9yeS0+R2V0KCJudHVw
bGUiKTsNCiAgSW5pdCh0KTsNCn0NCg0KLy8gIyBJbnRfdCBudHVwbGU6Okdl
dEV2ZW50KEludF90IGV2ZW50KSANCkludF90IG50dXBsZTo6R2V0RXZlbnQo
SW50X3QgZXZlbnQpDQp7DQogIC8vICMgUHJlcGFyZSB0byByZWFkIHNwZWNp
ZmllZCBldmVudCBmcm9tIHRoZSBUcmVlLiANCiAgaWYgKCFmVHJlZSkgcmV0
dXJuIDA7DQogIGZFdmVudCA9IGV2ZW50Ow0KICAvLyAjIFNldCBicmFuY2gg
c3RhdHVzZXMgdG8gMCANCiAgYnJhbmNoX3B4ID0gMDsNCiAgYnJhbmNoX3B5
ID0gMDsNCiAgYnJhbmNoX3B6ID0gMDsNCiAgYnJhbmNoX3JhbmRvbSA9IDA7
DQogIGJyYW5jaF9pID0gMDsNCiAgcmV0dXJuIDE7DQp9DQoNCi8vICMgdm9p
ZCBudHVwbGU6OkluaXQoVFRyZWUgKnRyZWUpIA0Kdm9pZCBudHVwbGU6Oklu
aXQoVFRyZWUgKnRyZWUpDQp7DQogIC8vICMgSW5pdGlhbGl6ZSBwdWJsaWMg
dmFyaWFibGVzLiANCiAgZlRyZWUgPSB0cmVlOw0KICBmRXZlbnQgPSAtMTsN
CiAgaWYgKCF0cmVlKSByZXR1cm47DQogIC8vICMgU2V0IGJyYW5jaCBhZGRy
ZXNzZXMuIA0KICBmVHJlZS0+U2V0QnJhbmNoQWRkcmVzcygicHgiLCZsZWFm
X3B4KTsNCiAgZlRyZWUtPlNldEJyYW5jaEFkZHJlc3MoInB5IiwmbGVhZl9w
eSk7DQogIGZUcmVlLT5TZXRCcmFuY2hBZGRyZXNzKCJweiIsJmxlYWZfcHop
Ow0KICBmVHJlZS0+U2V0QnJhbmNoQWRkcmVzcygicmFuZG9tIiwmbGVhZl9y
YW5kb20pOw0KICBmVHJlZS0+U2V0QnJhbmNoQWRkcmVzcygiaSIsJmxlYWZf
aSk7DQogIC8vICMgU2V0IGJyYW5jaCBzdGF0dXNlcyB0byAwLCBpbml0aWFs
aXplIGJyYW5jaCBwb2ludGVycyANCiAgZlRyZWUtPlNldEJyYW5jaFN0YXR1
cygiKiIsMCk7IC8vIGRpc2FibGUgYWxsIGJyYW5jaGVzDQogIGJyYW5jaF9w
eCA9IDA7DQogIGJyYW5jaF9wb2ludGVyX3B4ID0gZlRyZWUtPkdldEJyYW5j
aCgicHgiKTsNCiAgYnJhbmNoX3B5ID0gMDsNCiAgYnJhbmNoX3BvaW50ZXJf
cHkgPSBmVHJlZS0+R2V0QnJhbmNoKCJweSIpOw0KICBicmFuY2hfcHogPSAw
Ow0KICBicmFuY2hfcG9pbnRlcl9weiA9IGZUcmVlLT5HZXRCcmFuY2goInB6
Iik7DQogIGJyYW5jaF9yYW5kb20gPSAwOw0KICBicmFuY2hfcG9pbnRlcl9y
YW5kb20gPSBmVHJlZS0+R2V0QnJhbmNoKCJyYW5kb20iKTsNCiAgYnJhbmNo
X2kgPSAwOw0KICBicmFuY2hfcG9pbnRlcl9pID0gZlRyZWUtPkdldEJyYW5j
aCgiaSIpOw0KfQ0KDQovLyAjIEludF90IG50dXBsZTo6TG9vcChJbnRfdCAo
KmFuYWx5c2lzKShudHVwbGUgKikpIA0KSW50X3QgbnR1cGxlOjpMb29wKElu
dF90ICgqYW5hbHlzaXMpKG50dXBsZSAqKSkNCnsNCiAgLy8gIyBFeGVjdXRl
IHRoZSBhbmFseXNpcyBmdW5jdGlvbiBmb3IgZXZlcnkgZXZlbnQuIEluIGNh
c2UgdGhlIA0KICAvLyAjIGFuYWx5c2lzIGZ1bmN0aW9uIHJldHVybnMgYSBu
b24gemVybyB2YWx1ZSwgYnJlYWsgdGhlIGxvb3AuIA0KICBpZiAoIWZUcmVl
IHx8ICFhbmFseXNpcykgcmV0dXJuIDA7DQogIA0KICAvLyAjIExvY2FsIHZh
cmlhYmxlcyAoIGNvbW1vbiB0byBjb21waWxlZCBhbmQgaW50ZXJwcmV0ZWQg
Y29kZSApLiANCiAgU3RhdF90IG5lbnRyaWVzID0gR2V0RW50cmllcygpOyAv
LyBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgVHJlZS4NCiAgSW50X3QgbmV2
ZW50cyA9IDA7IC8vIEhvdyBtYW55IGV2ZW50cyB3ZXJlIGFuYWx5c2VkLg0K
ICANCiAgLy8gIyBUaGlzIGlzIHRoZSBldmVudCBsb29wIGluIGNvbXBpbGVk
IGNvZGUuIA0KI2lmbmRlZiBfX0NJTlRfXw0KICANCiAgLy8gIyBGaXJzdCBk
ZWZpbmUgc29tZSBsb2NhbCB2YXJpYWJsZXMgYW5kIG9iamVjdHMuIA0KICBj
aGFyIHRlbXBbNjRdOyAvLyBJTlRFUlBSRVRFREZVTkMNCiAgbG9uZyBvZmZz
ZXQgPSAwOyAvLyBJTlRFUlBSRVRFREZVTkMNCiAgR19fQ2xhc3NJbmZvIGds
b2JhbHNjb3BlOyAvLyBJTlRFUlBSRVRFREZVTkMNCiAgR19fQ2FsbEZ1bmMg
ZnVuYzsgLy8gSU5URVJQUkVURURGVU5DLCBDT01QSUxFRElOVEVSRkFDRU1F
VEhPRCwgQllURUNPREVGVU5DDQogIA0KICAvLyAjIFRoZW4gZXhlY3V0ZSB0
aGUgbG9vcC4gDQogIHN3aXRjaChHX19pc2ludGVycHJldGVkcDJmKCgodm9p
ZCopYW5hbHlzaXMpKSkgew0KICAgIC8vICMgdXNpbmcgZnVuY3Rpb24gY2Fs
bCBhcyBzdHJpbmcgDQogIGNhc2UgR19fSU5URVJQUkVURURGVU5DOg0KICAg
IHNwcmludGYodGVtcCwiKG50dXBsZSAqKSVwIiwodm9pZCopdGhpcyk7DQog
ICAgZnVuYy5TZXRGdW5jKCZnbG9iYWxzY29wZSwoY2hhciopYW5hbHlzaXMs
dGVtcCwmb2Zmc2V0KTsNCiAgICBmb3IgKEludF90IGk9MDsgaTxuZW50cmll
czsgaSsrKSB7DQogICAgICBuZXZlbnRzICs9IEdldEV2ZW50KGkpOw0KICAg
ICAgaWYgKGZ1bmMuRXhlY0ludCgodm9pZCopTlVMTCkpIGJyZWFrOw0KICAg
IH0NCiAgICBicmVhazsNCiAgICAvLyAjIHVzaW5nIGludGVyZmFjZSBtZXRo
b2QgDQogIGNhc2UgR19fQ09NUElMRURJTlRFUkZBQ0VNRVRIT0Q6DQogICAg
ZnVuYy5TZXRGdW5jKChHX19JbnRlcmZhY2VNZXRob2QpYW5hbHlzaXMpOw0K
ICAgIGZ1bmMuU2V0QXJnKCgobG9uZyl0aGlzKSk7DQogICAgZm9yIChJbnRf
dCBpPTA7IGk8bmVudHJpZXM7IGkrKykgew0KICAgICAgbmV2ZW50cyArPSBH
ZXRFdmVudChpKTsNCiAgICAgIGlmIChmdW5jLkV4ZWNJbnQoKHZvaWQqKU5V
TEwpKSBicmVhazsNCiAgICB9DQogICAgYnJlYWs7DQogICAgLy8gIyBieXRl
Y29kZSB2ZXJzaW9uIG9mIGludGVycHJldGVkIGZ1bmMgDQogIGNhc2UgR19f
QllURUNPREVGVU5DOg0KICAgIGZ1bmMuU2V0Qnl0ZWNvZGUoKHN0cnVjdCBH
X19ieXRlY29kZWZ1bmMqKWFuYWx5c2lzKTsNCiAgICBmdW5jLlNldEFyZygo
KGxvbmcpdGhpcykpOw0KICAgIGZvciAoSW50X3QgaT0wOyBpPG5lbnRyaWVz
OyBpKyspIHsNCiAgICAgIG5ldmVudHMgKz0gR2V0RXZlbnQoaSk7DQogICAg
ICBpZiAoZnVuYy5FeGVjSW50KCh2b2lkKilOVUxMKSkgYnJlYWs7DQogICAg
fQ0KICAgIGJyZWFrOw0KICAgIC8vICMgdXNpbmcgdHJ1ZSBwb2ludGVyIHRv
IGZ1bmN0aW9uIA0KICBjYXNlIEdfX0NPTVBJTEVEVFJVRUZVTkM6DQogICAg
Ly8gIyBwb2ludGVyIG5vdCBpbiBDSU5UIGdsb2JhbCBmdW5jdGlvbiB0YWJs
ZSANCiAgY2FzZSBHX19VTktOT1dORlVOQzoNCiAgICBmb3IgKEludF90IGk9
MDsgaTxuZW50cmllczsgaSsrKSB7DQogICAgICBuZXZlbnRzICs9IEdldEV2
ZW50KGkpOw0KICAgICAgaWYgKCgqYW5hbHlzaXMpKHRoaXMpKSBicmVhazsN
CiAgICB9DQogICAgYnJlYWs7DQogICAgLy8gIyB0aGlzIHNob3VsZCBuZXZl
ciBoYXBwZW4gKCB1bmtub3duIGtpbmQgb2YgcG9pbnRlciApIA0KICBkZWZh
dWx0Og0KICAgIGNlcnIgPDwgIkVycm9yIDogVW5rbm93biBraW5kIG9mIHBv
aW50ZXIgdG8gZnVuY3Rpb24iIDw8IGVuZGw7DQogICAgYnJlYWs7DQogIH0N
CiAgDQogIC8vICMgVGhpcyBpcyB0aGUgZXZlbnQgbG9vcCBpbiBpbnRlcnBy
ZXRlZCBjb2RlLiANCiNlbHNlDQogIA0KICAvLyAjIGN1cnJlbnQgQ0lOVCBj
YW5ub3QgZGVhbCB3aXRoIHRoaXMgDQojaWYgMA0KICBmb3IgKEludF90IGk9
MDsgaTxuZW50cmllczsgaSsrKSB7DQogICAgbmV2ZW50cyArPSBHZXRFdmVu
dChpKTsNCiAgICBpZiAoKCphbmFseXNpcykodGhpcykpIGJyZWFrOyAvLyBj
dXJyZW50IENJTlQgY2Fubm90IGRlYWwgd2l0aCBpdA0KICB9DQogIC8vICMg
c28gd2UgbmVlZCB0byB1c2UgdGhpcyANCiNlbHNlDQogIEludF90IHJlc3Vs
dDsNCiAgZm9yIChJbnRfdCBpPTA7IGk8bmVudHJpZXM7IGkrKykgew0KICAg
IG5ldmVudHMgKz0gR2V0RXZlbnQoaSk7DQogICAgcmVzdWx0ID0gKCphbmFs
eXNpcykodGhpcyk7DQogICAgaWYgKHJlc3VsdCkgYnJlYWs7DQogIH0NCiNl
bmRpZg0KICANCiNlbmRpZg0KICANCiAgLy8gIyBXZSBhcmUgZG9uZSwgcmV0
dXJuLiANCiAgcmV0dXJuIG5ldmVudHM7DQp9DQoNCi8vICMgdm9pZCBudHVw
bGU6OlNob3coSW50X3QgZXZlbnQpIA0Kdm9pZCBudHVwbGU6OlNob3coSW50
X3QgZXZlbnQpDQp7DQogIC8vICMgUHJpbnQgY29udGVudHMgb2YgZXZlbnQg
KCBhbGwgYnJhbmNoZXMgKS4gDQogIC8vICMgSWYgZXZlbnQgaXMgbm90IHNw
ZWNpZmllZCwgcHJpbnQgY3VycmVudCBldmVudC4gDQogIGlmICghZlRyZWUp
IHJldHVybjsNCiAgaWYgKGV2ZW50Pj0wKSBmRXZlbnQgPSBldmVudDsgZWxz
ZSBldmVudCA9IGZFdmVudDsNCiAgaWYgKGZFdmVudDwwKSByZXR1cm47DQog
IGZUcmVlLT5TZXRCcmFuY2hTdGF0dXMoIioiLDEpOyAgLy8gZW5hYmxlIGFs
bCBicmFuY2hlcw0KICBmVHJlZS0+U2hvdyhmRXZlbnQpOw0KICBmVHJlZS0+
U2V0QnJhbmNoU3RhdHVzKCIqIiwwKTsgIC8vIGRpc2FibGUgYWxsIGJyYW5j
aGVzDQogIC8vICMgU2V0IGJyYW5jaCBzdGF0dXNlcyB0byAxIA0KICBicmFu
Y2hfcHggPSAxOw0KICBicmFuY2hfcHkgPSAxOw0KICBicmFuY2hfcHogPSAx
Ow0KICBicmFuY2hfcmFuZG9tID0gMTsNCiAgYnJhbmNoX2kgPSAxOw0KfQ0K
DQojZW5kaWYNCg0KLy8gIyBFbmQgb2YgZmlsZSBudHVwbGUuaHh4IA0K
---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="ntuple.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990521102306.7070J@uranos.cto.us.edu.pl>
Content-Description: ntuple.cxx

Ly8gIyBJbmNsdWRlIHRoZSBudHVwbGUgY2xhc3MgaW50ZXJmYWNlIHNwZWNp
ZmljYXRpb24uIA0KI2lmbmRlZiBudHVwbGVfY3h4DQojZGVmaW5lIG50dXBs
ZV9jeHgNCiNlbmRpZg0KI2luY2x1ZGUgIm50dXBsZS5oeHgiDQojdW5kZWYg
bnR1cGxlX2N4eA0KDQovLyAjIFBsYWNlIGhlcmUgYWxsIFJPT1QgcmVsYXRl
ZCBpbmNsdWRlcyB0aGF0IHlvdSBuZWVkLiANCiNpZm5kZWYgX19DSU5UX18N
CiNpbmNsdWRlICJUSDEuaCINCiNpbmNsdWRlICJUSDIuaCINCiNpbmNsdWRl
ICJUQ2FudmFzLmgiDQojZW5kaWYNCg0KLy8gIyBJbnRfdCBudHVwbGU6Okxv
b3AoKSANCkludF90IG50dXBsZTo6TG9vcCgpDQp7DQogIC8vICMgTG9jYWwg
dmFyaWFibGVzLiANCiAgU3RhdF90IG5lbnRyaWVzID0gR2V0RW50cmllcygp
OyAvLyBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgVHJlZS4NCiAgSW50X3Qg
bmV2ZW50cyA9IDA7IC8vIEhvdyBtYW55IGV2ZW50cyB3ZXJlIGFuYWx5c2Vk
Lg0KICANCiAgLy8gIyBDcmVhdGUgaGlzdG9ncmFtcy4gDQogIFRIMUYgKmhf
cHg9IG5ldyBUSDFGKCJweCIsInB4IiwxMDAsLTQsNCk7DQogIFRIMUYgKmhf
cHk9IG5ldyBUSDFGKCJweSIsInB5IiwxMDAsLTUsNSk7DQogIFRIMUYgKmhf
cHo9IG5ldyBUSDFGKCJweiIsInB6IiwxMDAsMCwyMCk7DQogIFRIMUYgKmhf
cmFuZG9tPSBuZXcgVEgxRigicmFuZG9tIiwicmFuZG9tIiwxMDAsMCwxKTsN
CiAgVEgxRiAqaF9pPSBuZXcgVEgxRigiaSIsImkiLDEwMCwwLDMwMDAwKTsN
CiAgVEgyRiAqaF9weHB6PSBuZXcgVEgyRigicHhweiIsInB4cHoiLDEwMCww
LDIwLDEwMCwtNCw0KTsNCiAgDQogIC8vICMgVGhpcyBpcyB0aGUgbG9vcCBz
a2VsZXRvbi4gDQogIGZvciAoSW50X3QgbD0wOyBsPG5lbnRyaWVzOyBsKysp
IHsNCiAgICBuZXZlbnRzICs9IEdldEV2ZW50KGwpOw0KICAgIGhfcHgtPkZp
bGwocHgoKSk7DQogICAgaF9weS0+RmlsbChweSgpKTsNCiAgICBoX3B6LT5G
aWxsKHB6KCkpOw0KICAgIGhfcmFuZG9tLT5GaWxsKHJhbmRvbSgpKTsNCiAg
ICBoX2ktPkZpbGwoaSgpKTsNCiAgICBoX3B4cHotPkZpbGwocHooKSxweCgp
KTsNCiAgfQ0KICANCiAgLy8gIyBTaG93IHJlc3VsdHMuIA0KICBUQ2FudmFz
ICpjID0gbmV3IFRDYW52YXMoImMiKTsNCiAgYy0+RGl2aWRlKDIsMyk7DQog
IGMtPmNkKDEpOw0KICBoX3B4LT5EcmF3KCk7DQogIGMtPmNkKDIpOw0KICBo
X3B5LT5EcmF3KCk7DQogIGMtPmNkKDMpOw0KICBoX3B6LT5EcmF3KCk7DQog
IGMtPmNkKDQpOw0KICBoX3JhbmRvbS0+RHJhdygpOw0KICBjLT5jZCg1KTsN
CiAgaF9pLT5EcmF3KCk7DQogIGMtPmNkKDYpOw0KICBoX3B4cHotPkRyYXco
KTsNCiAgDQogIC8vICMgV2UgYXJlIGRvbmUsIHJldHVybi4gDQogIHJldHVy
biBuZXZlbnRzOw0KfQ0KDQovLyAjIEVuZCBvZiBmaWxlIG50dXBsZS5jeHgg
DQo=
---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990521102306.7070K@uranos.cto.us.edu.pl>
Content-Description: Makefile

U3JjU3VmICAgICAgICA9IGN4eA0KSW5jU3VmICAgICAgICA9IGh4eA0KDQpP
YmpTdWYgICAgICAgID0gbw0KRXhlU3VmICAgICAgICA9DQpEbGxTdWYgICAg
ICAgID0gc28NCk91dFB1dE9wdCAgICAgPSAtbw0KDQpST09UTElCUyAgICAg
ID0gLUwkKFJPT1RTWVMpL2xpYiAtbE5ldyAtbEJhc2UgLWxDaW50IC1sQ2xp
YiAtbENvbnQgLWxGdW5jIFwNCiAgICAgICAgICAgICAgICAtbEdyYWYgLWxH
cmFmM2QgLWxIaXN0IC1sSHRtbCAtbE1hdHJpeCAtbE1ldGEgLWxNaW51aXQg
LWxOZXQgXA0KICAgICAgICAgICAgICAgIC1sUGh5c2ljcyAtbFBvc3RzY3Jp
cHQgLWxQcm9vZiAtbFRyZWUgLWxVbml4IC1sWmlwDQpST09UR0xJQlMgICAg
ID0gLWxHcGFkIC1sR3VpIC1sR1gxMSAtbFgzZA0KDQojIExpbnV4IHdpdGgg
ZWdjcw0KRUdDUyAgICAgICAgICA9IC9vcHQvZWdjcy9wcm8NCkNYWCAgICAg
ICAgICAgPSBnKysNCkNYWEZMQUdTICAgICAgPSAtZyAtTzIgLVdhbGwgLWZu
by1ydHRpIC1mbm8tZXhjZXB0aW9ucyAtZlBJQyAtSSQoUk9PVFNZUykvaW5j
bHVkZQ0KTEQgICAgICAgICAgICA9IGcrKw0KTERGTEFHUyAgICAgICA9IC1n
IC1PMiAtV2wsLXJwYXRoLCQoRUdDUykvbGliOiQoUk9PVFNZUykvbGliDQpT
T0ZMQUdTICAgICAgID0gLXNoYXJlZA0KTElCUyAgICAgICAgICA9ICQoUk9P
VExJQlMpIC1sbSAtbGRsIC1yZHluYW1pYw0KR0xJQlMgICAgICAgICA9ICQo
Uk9PVExJQlMpICQoUk9PVEdMSUJTKSAtTC91c3IvWDExUjYvbGliIFwNCiAg
ICAgICAgICAgICAgICAtbFhwbSAtbFgxMSAtbG0gLWxkbCAtcmR5bmFtaWMN
Cg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCk5U
VVBMRU8gICAgICAgPSBudHVwbGUuJChPYmpTdWYpIG50dXBsZURpY3QuJChP
YmpTdWYpDQpOVFVQTEVTICAgICAgID0gbnR1cGxlLiQoU3JjU3VmKSBudHVw
bGVEaWN0LiQoU3JjU3VmKQ0KTlRVUExFU08gICAgICA9IG50dXBsZS4kKERs
bFN1ZikNCg0KT0JKUyAgICAgICAgICA9ICQoTlRVUExFTykNCg0KUFJPR1JB
TVMgICAgICA9ICQoTlRVUExFU08pDQoNCmFsbDogICAgICAgICAgICAkKFBS
T0dSQU1TKQ0KDQokKE5UVVBMRVNPKTogICAgJChOVFVQTEVPKQ0KCQkkKExE
KSAkKFNPRkxBR1MpICQoTERGTEFHUykgJChOVFVQTEVPKSAkKE91dFB1dE9w
dCkgJChOVFVQTEVTTykNCg0KY2xlYW46DQoJCUBybSAtZiAkKE9CSlMpICpE
aWN0LiogKn4gLip+IGNvcmUNCg0KLlNVRkZJWEVTOiAuJChTcmNTdWYpDQoN
CiMjIw0KDQpudHVwbGUuJChPYmpTdWYpOiBudHVwbGUuJChTcmNTdWYpIG50
dXBsZS4kKEluY1N1ZikNCm50dXBsZURpY3QuJChTcmNTdWYpOiBudHVwbGUu
JChJbmNTdWYpDQoJQGVjaG8gIkdlbmVyYXRpbmcgZGljdGlvbmFyeSBudHVw
bGVEaWN0Li4uIg0KCUAkKFJPT1RTWVMpL2Jpbi9yb290Y2ludCAtZiBudHVw
bGVEaWN0LiQoU3JjU3VmKSAtYyBudHVwbGUuJChJbmNTdWYpDQoNCi4kKFNy
Y1N1ZikuJChPYmpTdWYpOg0KCSQoQ1hYKSAkKENYWEZMQUdTKSAtYyAkPA0K

---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="loop.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990521102306.7070L@uranos.cto.us.edu.pl>
Content-Description: loop.cxx

Ly8gIyBQbGFjZSBoZXJlIGFsbCBST09UIHJlbGF0ZWQgaW5jbHVkZXMgdGhh
dCB5b3UgbmVlZC4gDQojaWZuZGVmIF9fQ0lOVF9fDQojaW5jbHVkZSAibnR1
cGxlLmh4eCIgLy8gSW5jbHVkZSB0aGUgbnR1cGxlIGNsYXNzIGludGVyZmFj
ZSBzcGVjaWZpY2F0aW9uLg0KI2luY2x1ZGUgIlRIMS5oIg0KI2luY2x1ZGUg
IlRIMi5oIg0KI2luY2x1ZGUgIlRDYW52YXMuaCINCiNlbHNlDQpjbGFzcyBu
dHVwbGU7DQojZW5kaWYNCg0KLy8gIyBJbnRfdCBsb29wKG50dXBsZSAqbikg
DQpJbnRfdCBsb29wKG50dXBsZSAqbikNCnsNCiAgLy8gIyBMb2NhbCB2YXJp
YWJsZXMuIA0KICBTdGF0X3QgbmVudHJpZXMgPSBuLT5HZXRFbnRyaWVzKCk7
IC8vIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBUcmVlLg0KICBJbnRfdCBu
ZXZlbnRzID0gMDsgLy8gSG93IG1hbnkgZXZlbnRzIHdlcmUgYW5hbHlzZWQu
DQogIA0KICAvLyAjIENyZWF0ZSBoaXN0b2dyYW1zLiANCiAgVEgxRiAqaF9w
eD0gbmV3IFRIMUYoInB4IiwicHgiLDEwMCwtNCw0KTsNCiAgVEgxRiAqaF9w
eT0gbmV3IFRIMUYoInB5IiwicHkiLDEwMCwtNSw1KTsNCiAgVEgxRiAqaF9w
ej0gbmV3IFRIMUYoInB6IiwicHoiLDEwMCwwLDIwKTsNCiAgVEgxRiAqaF9y
YW5kb209IG5ldyBUSDFGKCJyYW5kb20iLCJyYW5kb20iLDEwMCwwLDEpOw0K
ICBUSDFGICpoX2k9IG5ldyBUSDFGKCJpIiwiaSIsMTAwLDAsMzAwMDApOw0K
ICBUSDJGICpoX3B4cHo9IG5ldyBUSDJGKCJweHB6IiwicHhweiIsMTAwLDAs
MjAsMTAwLC00LDQpOw0KICANCiAgLy8gIyBUaGlzIGlzIHRoZSBsb29wIHNr
ZWxldG9uLiANCiAgZm9yIChJbnRfdCBsPTA7IGw8bmVudHJpZXM7IGwrKykg
ew0KICAgIG5ldmVudHMgKz0gbi0+R2V0RXZlbnQobCk7DQogICAgaF9weC0+
RmlsbChuLT5weCgpKTsNCiAgICBoX3B5LT5GaWxsKG4tPnB5KCkpOw0KICAg
IGhfcHotPkZpbGwobi0+cHooKSk7DQogICAgaF9yYW5kb20tPkZpbGwobi0+
cmFuZG9tKCkpOw0KICAgIGhfaS0+RmlsbChuLT5pKCkpOw0KICAgIGhfcHhw
ei0+RmlsbChuLT5weigpLG4tPnB4KCkpOw0KICB9DQogIA0KICAvLyAjIFNo
b3cgcmVzdWx0cy4gDQogIFRDYW52YXMgKmMgPSBuZXcgVENhbnZhcygiYyIp
Ow0KICBjLT5EaXZpZGUoMiwzKTsNCiAgYy0+Y2QoMSk7DQogIGhfcHgtPkRy
YXcoKTsNCiAgYy0+Y2QoMik7DQogIGhfcHktPkRyYXcoKTsNCiAgYy0+Y2Qo
Myk7DQogIGhfcHotPkRyYXcoKTsNCiAgYy0+Y2QoNCk7DQogIGhfcmFuZG9t
LT5EcmF3KCk7DQogIGMtPmNkKDUpOw0KICBoX2ktPkRyYXcoKTsNCiAgYy0+
Y2QoNik7DQogIGhfcHhwei0+RHJhdygpOw0KICANCiAgLy8gIyBXZSBhcmUg
ZG9uZSwgcmV0dXJuLiANCiAgcmV0dXJuIG5ldmVudHM7DQp9DQoNCi8vICMg
RW5kIG9mIGZpbGUgbG9vcC5jeHggDQo=
---559023410-1804928587-927200978=:9606
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="analysis.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.3.96.990521102306.7070M@uranos.cto.us.edu.pl>
Content-Description: analysis.cxx

Ly8gIyBQbGFjZSBoZXJlIGFsbCBST09UIHJlbGF0ZWQgaW5jbHVkZXMgdGhh
dCB5b3UgbmVlZC4gDQojaWZuZGVmIF9fQ0lOVF9fDQojaW5jbHVkZSAibnR1
cGxlLmh4eCIgLy8gSW5jbHVkZSB0aGUgbnR1cGxlIGNsYXNzIGludGVyZmFj
ZSBzcGVjaWZpY2F0aW9uLg0KI2luY2x1ZGUgIlRIMS5oIg0KI2luY2x1ZGUg
IlRIMi5oIg0KI2luY2x1ZGUgIlRDYW52YXMuaCINCiNlbHNlDQpjbGFzcyBu
dHVwbGU7DQojZW5kaWYNCg0KLy8gIyBDcmVhdGUgaGlzdG9ncmFtcy4gDQpU
SDFGICpoX3B4PSBuZXcgVEgxRigicHgiLCJweCIsMTAwLC00LDQpOw0KVEgx
RiAqaF9weT0gbmV3IFRIMUYoInB5IiwicHkiLDEwMCwtNSw1KTsNClRIMUYg
KmhfcHo9IG5ldyBUSDFGKCJweiIsInB6IiwxMDAsMCwyMCk7DQpUSDFGICpo
X3JhbmRvbT0gbmV3IFRIMUYoInJhbmRvbSIsInJhbmRvbSIsMTAwLDAsMSk7
DQpUSDFGICpoX2k9IG5ldyBUSDFGKCJpIiwiaSIsMTAwLDAsMzAwMDApOw0K
VEgyRiAqaF9weHB6PSBuZXcgVEgyRigicHhweiIsInB4cHoiLDEwMCwwLDIw
LDEwMCwtNCw0KTsNCg0KLy8gIyBJbnRfdCBhbmFseXNpcyhudHVwbGUgKm4p
IA0KSW50X3QgYW5hbHlzaXMobnR1cGxlICpuKQ0Kew0KICAvLyAjIEFuYWx5
c2Ugc2luZ2xlIGV2ZW50LiANCiAgaF9weC0+RmlsbChuLT5weCgpKTsNCiAg
aF9weS0+RmlsbChuLT5weSgpKTsNCiAgaF9wei0+RmlsbChuLT5weigpKTsN
CiAgaF9yYW5kb20tPkZpbGwobi0+cmFuZG9tKCkpOw0KICBoX2ktPkZpbGwo
bi0+aSgpKTsNCiAgaF9weHB6LT5GaWxsKG4tPnB6KCksbi0+cHgoKSk7DQog
IA0KICAvLyAjIFdlIGFyZSBkb25lLCByZXR1cm4uIA0KICByZXR1cm4gMDsN
Cn0NCg0KLy8gIyBFbmQgb2YgZmlsZSBhbmFseXNpcy5jeHggDQo=
---559023410-1804928587-927200978=:9606--